pi-cursor-sdk 0.5.0 → 0.5.3

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 (737) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +135 -34
  3. package/dist/context.js +55 -36
  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 +402 -1
  10. package/dist/cursor-fallback-warning.js +8 -2
  11. package/dist/cursor-live-run-coordinator.js +22 -2
  12. package/dist/cursor-local-agent-ownership.js +17 -0
  13. package/dist/cursor-mcp-timeout-override.js +3 -1
  14. package/dist/cursor-pi-tool-bridge-diagnostics.js +4 -0
  15. package/dist/cursor-pi-tool-bridge-run.js +31 -3
  16. package/dist/cursor-pi-tool-bridge-server.js +1 -1
  17. package/dist/cursor-provider-binding.js +70 -10
  18. package/dist/cursor-provider-errors.js +33 -26
  19. package/dist/cursor-provider-live-run-drain.js +10 -4
  20. package/dist/cursor-provider-run-finalizer.js +2 -1
  21. package/dist/cursor-provider-turn-prepare.js +25 -9
  22. package/dist/cursor-provider-turn-summary.js +1 -1
  23. package/dist/cursor-provider-turn-tool-ledger.js +13 -7
  24. package/dist/cursor-provider.js +2 -1
  25. package/dist/cursor-question-tool.js +5 -5
  26. package/dist/cursor-request-provenance.js +13 -2
  27. package/dist/cursor-sdk-output-filter.js +1 -1
  28. package/dist/cursor-sdk-process-error-guard.js +1 -3
  29. package/dist/cursor-sdk-runtime.js +13 -14
  30. package/dist/cursor-sdk-vendor-env.js +20 -0
  31. package/dist/cursor-session-agent-cleanup.js +38 -26
  32. package/dist/cursor-session-agent-lifecycle.js +2 -2
  33. package/dist/cursor-session-agent-lineage.js +11 -7
  34. package/dist/cursor-session-agent-resume.js +15 -9
  35. package/dist/cursor-session-agent.js +60 -23
  36. package/dist/cursor-session-scope.js +27 -14
  37. package/dist/cursor-session-send-policy.js +2 -2
  38. package/dist/cursor-session-settings.js +3 -3
  39. package/dist/cursor-session-store.js +235 -45
  40. package/dist/cursor-state.js +23 -9
  41. package/dist/cursor-tool-manifest.js +1 -1
  42. package/dist/index.js +21 -19
  43. package/dist/model-discovery.js +58 -26
  44. package/dist/model-list-cache.js +12 -1
  45. package/docs/cursor-live-smoke-checklist.md +2 -2
  46. package/docs/cursor-model-ux-spec.md +83 -30
  47. package/docs/cursor-native-tool-replay.md +16 -5
  48. package/docs/cursor-native-tool-visual-audit.md +1 -1
  49. package/docs/cursor-testing-lessons.md +63 -7
  50. package/docs/cursor-tool-surfaces.md +19 -4
  51. package/node_modules/@hono/node-server/README.md +21 -10
  52. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  53. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  54. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  55. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  56. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  57. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  58. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  59. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  60. package/node_modules/@hono/node-server/package.json +3 -2
  61. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
  62. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
  63. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
  64. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
  65. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
  66. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
  67. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
  68. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
  69. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
  70. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
  71. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
  72. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
  73. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
  74. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
  75. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
  76. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
  77. package/node_modules/@modelcontextprotocol/core/package.json +2 -2
  78. package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
  79. package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
  80. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
  81. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
  82. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
  83. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
  84. package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
  85. package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
  86. package/node_modules/@modelcontextprotocol/server/README.md +1 -7
  87. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
  88. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
  89. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
  90. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
  91. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
  92. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
  93. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
  94. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
  95. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
  96. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
  97. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
  98. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
  99. package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
  100. package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
  101. package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
  102. package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
  103. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
  104. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
  105. package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
  106. package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
  107. package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
  108. package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
  109. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
  110. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
  111. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
  112. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
  113. package/node_modules/@modelcontextprotocol/server/package.json +4 -4
  114. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  115. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  116. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  117. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  118. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  119. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  120. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  121. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  122. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  123. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  124. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  125. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  126. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  127. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  128. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  129. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  130. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  131. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  132. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  133. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  134. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  135. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  136. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  137. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  138. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  139. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  140. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  141. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  142. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  143. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  144. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  145. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  146. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  147. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  148. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  149. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  150. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  151. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  152. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  153. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  154. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  155. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  156. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  157. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  158. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  159. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  160. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  161. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  162. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  163. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  164. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  165. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  166. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  167. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  168. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  169. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  170. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  171. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  172. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  173. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  174. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  175. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  176. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  177. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  178. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  179. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  180. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  181. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  182. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  183. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  184. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  185. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  186. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  187. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  188. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  189. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  190. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  191. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  192. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  193. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  194. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  195. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  196. package/node_modules/hono/dist/cjs/compose.js +49 -66
  197. package/node_modules/hono/dist/cjs/context.js +379 -450
  198. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  199. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  200. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  201. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  202. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  203. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  204. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  205. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  206. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  207. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  208. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  209. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  210. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  211. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  212. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  213. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  214. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  215. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  216. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  217. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  218. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  219. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  220. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  221. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  222. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  223. package/node_modules/hono/dist/cjs/hono-base.js +347 -403
  224. package/node_modules/hono/dist/cjs/hono.js +28 -42
  225. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  226. package/node_modules/hono/dist/cjs/index.js +22 -30
  227. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  228. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  229. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  230. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  231. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  232. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  233. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  234. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  235. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  236. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  237. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  238. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  239. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  240. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  241. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  242. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  243. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  244. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  245. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  246. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  247. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  248. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  249. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  250. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  251. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  252. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  253. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  254. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  255. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  256. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  257. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  258. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  259. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  260. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  261. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  262. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  263. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  264. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  265. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  266. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  267. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  268. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  269. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  270. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  271. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  272. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  273. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  274. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  275. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  276. package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
  277. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  278. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  279. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  280. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  281. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  282. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  283. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  284. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  285. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  286. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  287. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  288. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  289. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  290. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  291. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  292. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  293. package/node_modules/hono/dist/cjs/request.js +334 -346
  294. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  295. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  296. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  297. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  298. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  299. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  300. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  301. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  302. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  303. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  304. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  305. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  306. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  307. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  308. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  309. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  310. package/node_modules/hono/dist/cjs/router.js +37 -37
  311. package/node_modules/hono/dist/cjs/types.js +5 -28
  312. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  313. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  314. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  315. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  316. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  317. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  318. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  319. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  320. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  321. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  322. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  323. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  324. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  325. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  326. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  327. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  328. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  329. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  330. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  331. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  332. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  333. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  334. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  335. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  336. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  337. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  338. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  339. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  340. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  341. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  342. package/node_modules/hono/dist/client/client.js +138 -197
  343. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  344. package/node_modules/hono/dist/client/index.js +3 -7
  345. package/node_modules/hono/dist/client/types.js +1 -0
  346. package/node_modules/hono/dist/client/utils.js +51 -68
  347. package/node_modules/hono/dist/compose.js +49 -45
  348. package/node_modules/hono/dist/context.js +376 -426
  349. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  350. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  351. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  352. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  353. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  354. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  355. package/node_modules/hono/dist/helper/css/common.js +167 -225
  356. package/node_modules/hono/dist/helper/css/index.js +132 -137
  357. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  358. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  359. package/node_modules/hono/dist/helper/html/index.js +30 -39
  360. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  361. package/node_modules/hono/dist/helper/route/index.js +121 -43
  362. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  363. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  364. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  365. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  366. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  367. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  368. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  369. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  370. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  371. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  372. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  373. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  374. package/node_modules/hono/dist/hono-base.js +344 -379
  375. package/node_modules/hono/dist/hono.js +27 -20
  376. package/node_modules/hono/dist/http-exception.js +53 -33
  377. package/node_modules/hono/dist/index.js +19 -6
  378. package/node_modules/hono/dist/jsx/base.js +231 -340
  379. package/node_modules/hono/dist/jsx/children.js +16 -20
  380. package/node_modules/hono/dist/jsx/components.js +118 -170
  381. package/node_modules/hono/dist/jsx/constants.js +9 -15
  382. package/node_modules/hono/dist/jsx/context.js +153 -150
  383. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  384. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  385. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  386. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  387. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  388. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  389. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  390. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  391. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  392. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  393. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  394. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  395. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  396. package/node_modules/hono/dist/jsx/index.js +45 -98
  397. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  398. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  399. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  400. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  401. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  402. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  403. package/node_modules/hono/dist/jsx/types.js +1 -0
  404. package/node_modules/hono/dist/jsx/utils.js +105 -168
  405. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  406. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  407. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  408. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  409. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  410. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  411. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  412. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  413. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  414. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  415. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  416. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  417. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  418. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  419. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  420. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  421. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  422. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  423. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  424. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  425. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  426. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  427. package/node_modules/hono/dist/middleware/mount/index.js +70 -0
  428. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  429. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  430. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  431. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  432. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  433. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  434. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  435. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  436. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  437. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  438. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  439. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  440. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  441. package/node_modules/hono/dist/preset/quick.js +17 -15
  442. package/node_modules/hono/dist/preset/tiny.js +14 -11
  443. package/node_modules/hono/dist/request/constants.js +4 -5
  444. package/node_modules/hono/dist/request.js +328 -319
  445. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  446. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  447. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  448. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  449. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  450. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  451. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  452. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  453. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  454. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  455. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  456. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  457. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  458. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  459. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  460. package/node_modules/hono/dist/router/utils.js +4 -5
  461. package/node_modules/hono/dist/router.js +35 -14
  462. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  463. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  464. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  465. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  466. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  467. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  468. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  469. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  470. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  471. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  472. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  473. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  474. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  475. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  476. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  477. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  478. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  479. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  480. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  481. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  482. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  483. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  484. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  485. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  486. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  487. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  488. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  489. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  490. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  491. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  492. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  493. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  494. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  495. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  496. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  497. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  498. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  499. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  500. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  501. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  502. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  503. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  504. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  505. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  506. package/node_modules/hono/dist/types/context.d.ts +335 -335
  507. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  508. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  509. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  510. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  511. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  512. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  513. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  514. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  515. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  516. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  517. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  518. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  519. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  520. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  521. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  522. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  523. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  524. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  525. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  526. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  527. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  528. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  529. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  530. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  531. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  532. package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
  533. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  534. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  535. package/node_modules/hono/dist/types/index.d.ts +6 -37
  536. package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
  537. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  538. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  539. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  540. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  541. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  542. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  543. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  544. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  545. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  546. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  547. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  548. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  549. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  550. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  551. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  552. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  553. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  554. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  555. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  556. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  557. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  558. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  559. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  560. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  561. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  562. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  563. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  564. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  565. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  566. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  567. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  568. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  569. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  570. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  571. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  572. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  573. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  574. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  575. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  576. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  577. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  578. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  579. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  580. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  581. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  582. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  583. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  584. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  585. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
  586. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  587. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  588. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  589. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  590. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  591. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  592. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  593. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  594. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  595. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  596. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  597. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  598. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  599. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  600. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  601. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  602. package/node_modules/hono/dist/types/request.d.ts +288 -286
  603. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  604. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  605. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  606. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  607. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  608. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  609. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  610. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  611. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  612. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  613. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  614. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  615. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  616. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  617. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  618. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  619. package/node_modules/hono/dist/types/router.d.ts +23 -22
  620. package/node_modules/hono/dist/types/types.d.ts +146 -505
  621. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  622. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  623. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  624. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  625. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  626. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  627. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  628. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  629. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  630. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  631. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  632. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  633. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  634. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  635. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  636. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  637. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  638. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  639. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  640. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  641. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  642. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  643. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  644. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  645. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  646. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  647. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  648. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  649. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  650. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  651. package/node_modules/hono/dist/types.js +4 -6
  652. package/node_modules/hono/dist/utils/accept.js +185 -212
  653. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  654. package/node_modules/hono/dist/utils/body.js +87 -92
  655. package/node_modules/hono/dist/utils/buffer.js +44 -71
  656. package/node_modules/hono/dist/utils/color.js +33 -21
  657. package/node_modules/hono/dist/utils/compress.js +11 -5
  658. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  659. package/node_modules/hono/dist/utils/constants.js +7 -5
  660. package/node_modules/hono/dist/utils/cookie.js +114 -163
  661. package/node_modules/hono/dist/utils/crypto.js +30 -40
  662. package/node_modules/hono/dist/utils/encode.js +30 -26
  663. package/node_modules/hono/dist/utils/filepath.js +23 -33
  664. package/node_modules/hono/dist/utils/handler.js +10 -11
  665. package/node_modules/hono/dist/utils/headers.js +1 -0
  666. package/node_modules/hono/dist/utils/html.js +97 -117
  667. package/node_modules/hono/dist/utils/http-status.js +1 -0
  668. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  669. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  670. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  671. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  672. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  673. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  674. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  675. package/node_modules/hono/dist/utils/mime.js +74 -79
  676. package/node_modules/hono/dist/utils/stream.js +86 -88
  677. package/node_modules/hono/dist/utils/types.js +1 -0
  678. package/node_modules/hono/dist/utils/url.js +187 -215
  679. package/node_modules/hono/dist/validator/index.js +1 -4
  680. package/node_modules/hono/dist/validator/utils.js +1 -0
  681. package/node_modules/hono/dist/validator/validator.js +61 -83
  682. package/node_modules/hono/package.json +35 -27
  683. package/package.json +20 -18
  684. package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
  685. package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
  686. package/scripts/platform-smoke/artifacts.mjs +7 -1
  687. package/shared/cursor-sdk-output-filter.d.mts +3 -0
  688. package/shared/cursor-sdk-output-filter.mjs +117 -44
  689. package/src/context.ts +59 -35
  690. package/src/cursor-api-key.ts +37 -17
  691. package/src/cursor-cloud-options.ts +2 -0
  692. package/src/cursor-config.ts +76 -0
  693. package/src/cursor-custom-store-path.ts +151 -0
  694. package/src/cursor-custom-subagent-definitions.ts +21 -0
  695. package/src/cursor-fallback-models.generated.ts +402 -1
  696. package/src/cursor-fallback-warning.ts +7 -3
  697. package/src/cursor-live-run-coordinator.ts +21 -2
  698. package/src/cursor-local-agent-ownership.ts +18 -0
  699. package/src/cursor-mcp-timeout-override.ts +3 -1
  700. package/src/cursor-pi-tool-bridge-diagnostics.ts +17 -0
  701. package/src/cursor-pi-tool-bridge-run.ts +31 -3
  702. package/src/cursor-pi-tool-bridge-server.ts +1 -2
  703. package/src/cursor-pi-tool-bridge-types.ts +3 -0
  704. package/src/cursor-provider-binding.ts +70 -11
  705. package/src/cursor-provider-errors.ts +32 -28
  706. package/src/cursor-provider-live-run-drain.ts +9 -4
  707. package/src/cursor-provider-run-finalizer.ts +2 -1
  708. package/src/cursor-provider-turn-prepare.ts +28 -13
  709. package/src/cursor-provider-turn-summary.ts +1 -1
  710. package/src/cursor-provider-turn-tool-ledger.ts +12 -7
  711. package/src/cursor-provider.ts +3 -1
  712. package/src/cursor-question-tool.ts +5 -5
  713. package/src/cursor-request-provenance.ts +18 -3
  714. package/src/cursor-sdk-output-filter.ts +2 -0
  715. package/src/cursor-sdk-process-error-guard.ts +1 -2
  716. package/src/cursor-sdk-runtime.ts +14 -15
  717. package/src/cursor-sdk-vendor-env.ts +22 -0
  718. package/src/cursor-session-agent-cleanup.ts +33 -27
  719. package/src/cursor-session-agent-lifecycle.ts +2 -2
  720. package/src/cursor-session-agent-lineage.ts +10 -5
  721. package/src/cursor-session-agent-resume.ts +14 -7
  722. package/src/cursor-session-agent.ts +67 -24
  723. package/src/cursor-session-scope.ts +33 -11
  724. package/src/cursor-session-send-policy.ts +2 -2
  725. package/src/cursor-session-settings.ts +3 -3
  726. package/src/cursor-session-store.ts +259 -53
  727. package/src/cursor-state.ts +32 -7
  728. package/src/cursor-tool-manifest.ts +1 -1
  729. package/src/index.ts +19 -19
  730. package/src/model-discovery.ts +68 -30
  731. package/src/model-list-cache.ts +11 -1
  732. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
  733. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
  734. package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
  735. package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
  736. package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
  737. package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
@@ -3,8 +3,9 @@ import { fsyncExistingRegularFile } from "./cursor-durable-fs.js";
3
3
  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
+ import { claimCursorLocalAgent } from "./cursor-local-agent-ownership.js";
6
7
  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";
8
+ import { withCursorSessionStoreIdentities, openCursorSessionStore, resolveCursorSessionStoreIdentity, } from "./cursor-session-store.js";
8
9
  export const CURSOR_SESSION_AGENT_CLEANUP_ENTRY_TYPE = "cursor-sdk-agent-cleanup";
9
10
  class InvalidCursorSessionStoreIdentityError extends Error {
10
11
  }
@@ -202,7 +203,7 @@ function appendDurableCleanupEntry(pi, ctx, data) {
202
203
  return false;
203
204
  return fsyncExistingRegularFile(sessionFile);
204
205
  }
205
- export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
206
+ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx, storeRoot) {
206
207
  const usage = "Usage: /cursor-local-resume-cleanup [--dry-run|--yes]";
207
208
  const tokens = args.trim().split(/\s+/).filter(Boolean);
208
209
  const dryRun = tokens.length === 0 || (tokens.length === 1 && tokens[0] === "--dry-run");
@@ -236,7 +237,7 @@ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
236
237
  }
237
238
  return;
238
239
  }
239
- if (!appendDurableCleanupEntry(pi, ctx, { action: "delete", phase: "intent", ...baseEntry })) {
240
+ if (!scope.sessionFile || !appendDurableCleanupEntry(pi, ctx, { action: "delete", phase: "intent", ...baseEntry })) {
240
241
  ctx.ui.notify("Cleanup intent could not be durably recorded. No agents were deleted.", "error");
241
242
  return;
242
243
  }
@@ -244,31 +245,42 @@ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
244
245
  const failedAgentIds = [];
245
246
  const openedStores = new Map();
246
247
  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);
248
+ await withCursorSessionStoreIdentities(ctx.cwd, scope.scopeKey, storeRoot, async (identities) => {
249
+ const operations = await getSdkOperations();
250
+ for (const candidate of plan.candidates) {
251
+ const { agentId } = candidate;
252
+ try {
253
+ const identity = await resolveCursorSessionStoreIdentity({
254
+ cwd: ctx.cwd, scopeKey: scope.scopeKey,
255
+ identities, recordedIdentity: candidate.storeIdentity, agentId,
256
+ });
257
+ if (!identity)
258
+ throw new InvalidCursorSessionStoreIdentityError("Recorded Cursor local store identity is not valid for this pi session");
259
+ let openedStore = openedStores.get(identity.stateRoot);
260
+ if (!openedStore) {
261
+ openedStore = await openCursorSessionStore(ctx.cwd, identity, identities.workspaceRoot, identities.storeRoot);
262
+ openedStores.set(identity.stateRoot, openedStore);
263
+ }
264
+ const release = claimCursorLocalAgent(identity, agentId);
265
+ if (!release)
266
+ throw new Error("Cursor local agent is still owned by an active runtime");
267
+ try {
268
+ await operations.delete(agentId, { cwd: ctx.cwd, store: openedStore.store });
269
+ }
270
+ finally {
271
+ release();
272
+ }
273
+ deletedAgentIds.push(agentId);
274
+ }
275
+ catch (error) {
276
+ failedAgentIds.push({
277
+ agentId,
278
+ error: scrubSensitiveText(getString(asRecord(error), "message") ?? String(error)),
279
+ ...(error instanceof InvalidCursorSessionStoreIdentityError ? { retryable: false } : {}),
280
+ });
260
281
  }
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
282
  }
271
- }
283
+ });
272
284
  }
273
285
  catch (error) {
274
286
  const message = scrubSensitiveText(getString(asRecord(error), "message") ?? String(error));
@@ -1,9 +1,9 @@
1
1
  import { clearCursorSdkHttp1 } from "./cursor-http1.js";
2
- import { cursorSessionScopeKeyForManager, hasLiveCursorSessions, onCursorSessionScopeKeyChange } from "./cursor-session-scope.js";
2
+ import { cursorRuntimeSessionScopeKeyForManager, hasLiveCursorSessions, onCursorSessionScopeKeyChange } from "./cursor-session-scope.js";
3
3
  import { disposeSessionCursorAgent, invalidateSessionAgent, resetSessionCursorAgent, } from "./cursor-session-agent.js";
4
4
  export function registerCursorSessionAgentLifecycle(pi) {
5
5
  let scopeKey;
6
- pi.on("session_start", (_event, ctx) => { scopeKey = cursorSessionScopeKeyForManager(ctx.sessionManager); });
6
+ pi.on("session_start", (_event, ctx) => { scopeKey = cursorRuntimeSessionScopeKeyForManager(ctx.sessionManager); });
7
7
  onCursorSessionScopeKeyChange(pi, async (previousScopeKey) => {
8
8
  await disposeSessionCursorAgent(previousScopeKey);
9
9
  });
@@ -52,7 +52,7 @@ function readRecordedAgentIds(entries, sessionId) {
52
52
  export function recordCursorSessionAgentLineage(agentId, turnScopeKey) {
53
53
  const sessionState = turnScopeKey === undefined
54
54
  ? state
55
- : statesByScope.get(turnScopeKey) ?? (state.scopeKey === turnScopeKey ? state : undefined);
55
+ : statesByScope.get(turnScopeKey) ?? ((state.runtimeScopeKey ?? state.scopeKey) === turnScopeKey ? state : undefined);
56
56
  if (!sessionState)
57
57
  return;
58
58
  const { appendEntry, sessionId, sessionFile, scopeKey, cwd } = sessionState;
@@ -83,24 +83,27 @@ export function registerCursorSessionAgentLineage(pi) {
83
83
  pi.on("session_start", (_event, ctx) => {
84
84
  state = sessionState;
85
85
  const record = sessionState;
86
- if (record.scopeKey && statesByScope.get(record.scopeKey) === record)
87
- statesByScope.delete(record.scopeKey);
86
+ if (record.runtimeScopeKey && statesByScope.get(record.runtimeScopeKey) === record)
87
+ statesByScope.delete(record.runtimeScopeKey);
88
88
  record.appendEntry = pi.appendEntry;
89
89
  record.sessionId = ctx.sessionManager.getSessionId();
90
90
  record.sessionFile = ctx.sessionManager.getSessionFile() ?? undefined;
91
- record.scopeKey = getCursorSessionScopeSnapshot(pi).scopeKey;
92
- statesByScope.set(record.scopeKey, record);
91
+ const scope = getCursorSessionScopeSnapshot(pi);
92
+ record.runtimeScopeKey = scope.scopeKey;
93
+ record.scopeKey = scope.persistentScopeKey ?? scope.scopeKey;
94
+ statesByScope.set(scope.scopeKey, record);
93
95
  record.cwd = ctx.cwd;
94
96
  record.recordedAgentIds = readRecordedAgentIds(ctx.sessionManager.getEntries(), record.sessionId);
95
97
  });
96
98
  pi.on("session_shutdown", () => {
97
99
  const state = sessionState;
98
- if (state.scopeKey && statesByScope.get(state.scopeKey) === state)
99
- statesByScope.delete(state.scopeKey);
100
+ if (state.runtimeScopeKey && statesByScope.get(state.runtimeScopeKey) === state)
101
+ statesByScope.delete(state.runtimeScopeKey);
100
102
  state.appendEntry = undefined;
101
103
  state.sessionId = undefined;
102
104
  state.sessionFile = undefined;
103
105
  state.scopeKey = undefined;
106
+ state.runtimeScopeKey = undefined;
104
107
  state.cwd = undefined;
105
108
  state.recordedAgentIds = new Set();
106
109
  });
@@ -111,6 +114,7 @@ function resetStateForTests() {
111
114
  state.sessionId = undefined;
112
115
  state.sessionFile = undefined;
113
116
  state.scopeKey = undefined;
117
+ state.runtimeScopeKey = undefined;
114
118
  state.cwd = undefined;
115
119
  state.recordedAgentIds = new Set();
116
120
  }
@@ -266,7 +266,7 @@ function restoreFromBranch(branch, allEntries, state) {
266
266
  }
267
267
  export function getMatchingCursorSessionAgentResumeHandle(poolKey, scopeKey) {
268
268
  const state = getResumeState(scopeKey);
269
- if (scopeKey !== undefined && state.scopeKey !== scopeKey)
269
+ if (scopeKey !== undefined && (state.runtimeScopeKey ?? state.scopeKey) !== scopeKey)
270
270
  return undefined;
271
271
  const handle = state.activeHandle;
272
272
  if (!handle || !isCursorLocalAgentId(handle.agentId))
@@ -292,7 +292,7 @@ export function getMatchingCursorSessionAgentResumeHandle(poolKey, scopeKey) {
292
292
  }
293
293
  export function persistCursorSessionAgentResumeHandle(input, scopeKey) {
294
294
  const state = getResumeState(scopeKey);
295
- if (scopeKey !== undefined && state.scopeKey !== scopeKey)
295
+ if (scopeKey !== undefined && (state.runtimeScopeKey ?? state.scopeKey) !== scopeKey)
296
296
  return;
297
297
  if (!isCursorLocalAgentId(input.agentId))
298
298
  return;
@@ -343,8 +343,9 @@ function flushPendingCursorSessionAgentResumeHandle(branch, state) {
343
343
  }
344
344
  }
345
345
  export function registerCursorSessionAgentResume(pi) {
346
+ const scope = getCursorSessionScopeSnapshot(pi);
346
347
  const sessionState = {
347
- appendEntry: pi.appendEntry, scopeKey: getCursorSessionScopeSnapshot(pi).scopeKey,
348
+ appendEntry: pi.appendEntry, scopeKey: scope.persistentScopeKey ?? scope.scopeKey,
348
349
  cwd: process.cwd(), branchPathHash: EMPTY_BRANCH_HASH,
349
350
  compactionGeneration: 0, unownedUserEntryIds: new Set(),
350
351
  };
@@ -355,10 +356,13 @@ export function registerCursorSessionAgentResume(pi) {
355
356
  restoreFromBranch(branch, entries.length > 0 ? entries : branch, state);
356
357
  };
357
358
  pi.on("session_start", (_event, ctx) => {
358
- if (statesByScope.get(state.scopeKey) === state)
359
- statesByScope.delete(state.scopeKey);
360
- state.scopeKey = getCursorSessionScopeSnapshot(pi).scopeKey;
361
- statesByScope.set(state.scopeKey, state);
359
+ const key = state.runtimeScopeKey ?? state.scopeKey;
360
+ if (statesByScope.get(key) === state)
361
+ statesByScope.delete(key);
362
+ const scope = getCursorSessionScopeSnapshot(pi);
363
+ state.runtimeScopeKey = scope.scopeKey;
364
+ state.scopeKey = scope.persistentScopeKey ?? scope.scopeKey;
365
+ statesByScope.set(scope.scopeKey, state);
362
366
  lastBoundState = state;
363
367
  state.sessionFile = ctx.sessionManager.getSessionFile?.() ?? undefined;
364
368
  state.sessionId = ctx.sessionManager.getSessionId?.() ?? undefined;
@@ -399,8 +403,9 @@ export function registerCursorSessionAgentResume(pi) {
399
403
  state.branchPathHash = hashBranchStep(state.branchPathHash, event.compactionEntry);
400
404
  });
401
405
  pi.on("session_shutdown", () => {
402
- if (statesByScope.get(state.scopeKey) === state)
403
- statesByScope.delete(state.scopeKey);
406
+ const key = state.runtimeScopeKey ?? state.scopeKey;
407
+ if (statesByScope.get(key) === state)
408
+ statesByScope.delete(key);
404
409
  state.appendEntry = undefined;
405
410
  state.pendingHandle = undefined;
406
411
  });
@@ -412,6 +417,7 @@ function resetStateForTests() {
412
417
  const state = lastBoundState;
413
418
  state.appendEntry = undefined;
414
419
  state.scopeKey = getCursorSessionScopeKey();
420
+ state.runtimeScopeKey = undefined;
415
421
  state.sessionFile = undefined;
416
422
  state.sessionId = undefined;
417
423
  state.cwd = process.cwd();
@@ -1,7 +1,9 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { normalizeCursorCustomStoreRoot } from "./cursor-custom-store-path.js";
3
+ import { claimCursorLocalAgent } from "./cursor-local-agent-ownership.js";
2
4
  import { getRegisteredCursorPiToolBridge, } from "./cursor-pi-tool-bridge.js";
3
5
  import { computeCursorContextFingerprint } from "./context.js";
4
- import { getCursorSessionFile, getCursorSessionScopeGeneration, getCursorSessionScopeKey } from "./cursor-session-scope.js";
6
+ import { getCursorSessionScopeSnapshot, getCursorSessionScopeGeneration, getCursorSessionScopeKey } from "./cursor-session-scope.js";
5
7
  import { getMatchingCursorSessionAgentResumeHandle, persistCursorSessionAgentResumeHandle, } from "./cursor-session-agent-resume.js";
6
8
  import { loadCursorSdk } from "./cursor-sdk-runtime.js";
7
9
  import { cursorSessionStoreIdentitiesEqual, openCursorSessionStore, openCursorSessionStoreForScope, } from "./cursor-session-store.js";
@@ -26,11 +28,14 @@ function assertScopeAcceptsAcquire(scopeKey) {
26
28
  }
27
29
  terminalDisposedScopeGenerations.delete(scopeKey);
28
30
  }
29
- function rethrowSupersededWhenReplacedByDifferentPoolKey(scopeKey, poolKey, error) {
31
+ function samePoolIdentity(entry, poolKey, capturedStoreRoot) {
32
+ return entry.poolKey === poolKey && entry.storeRoot === capturedStoreRoot;
33
+ }
34
+ function rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, storeRoot, error) {
30
35
  if (!(error instanceof SessionCursorAgentCreationSupersededError))
31
36
  return;
32
37
  const replacement = sessionAgentsByScope.get(scopeKey);
33
- if (replacement && replacement.poolKey !== poolKey) {
38
+ if (replacement && !samePoolIdentity(replacement, poolKey, storeRoot)) {
34
39
  throw error;
35
40
  }
36
41
  }
@@ -87,9 +92,23 @@ function buildBridgePoolKeySuffix(registeredBridge) {
87
92
  return "bridge:absent";
88
93
  return registeredBridge.getToolSurfaceSignature();
89
94
  }
95
+ function buildCustomSubagentPoolKeySuffix(agents) {
96
+ const definitions = Object.entries(agents ?? {}).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
97
+ if (!definitions.length)
98
+ return [];
99
+ const content = definitions.map(([name, entry]) => [
100
+ name, entry.description, entry.prompt,
101
+ entry.model === undefined ? null : entry.model === "inherit" ? "inherit" : {
102
+ id: entry.model.id,
103
+ 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)
104
+ .map(({ id, value }) => ({ id, value })),
105
+ },
106
+ ]);
107
+ return [`subagents:${createHash("sha256").update(JSON.stringify(content)).digest("hex")}`];
108
+ }
90
109
  function buildSessionAgentPoolKey(scopeKey, params) {
91
110
  return [
92
- scopeKey,
111
+ params.scope?.persistentScopeKey ?? scopeKey,
93
112
  params.cwd,
94
113
  buildModelPoolKey(params.modelSelection),
95
114
  buildSettingSourcesPoolKey(params.settingSources),
@@ -101,6 +120,7 @@ function buildSessionAgentPoolKey(scopeKey, params) {
101
120
  : "http1:off",
102
121
  buildApiKeyPoolKeyFingerprint(params.apiKey),
103
122
  buildBridgePoolKeySuffix("bridge" in params ? params.bridge : getRegisteredCursorPiToolBridge()),
123
+ ...buildCustomSubagentPoolKeySuffix(params.agents),
104
124
  ].join("\0");
105
125
  }
106
126
  async function disposePoolEntry(entry, options) {
@@ -113,8 +133,9 @@ async function disposePoolEntry(entry, options) {
113
133
  catch {
114
134
  // disposal failure should not block session replacement
115
135
  }
136
+ let disposal;
116
137
  try {
117
- const disposal = Promise.resolve(entry.agent[Symbol.asyncDispose]()).catch(() => undefined);
138
+ disposal = Promise.resolve(entry.agent[Symbol.asyncDispose]());
118
139
  // A dead local transport may never settle SDK disposal; bound the wait so the
119
140
  // next acquire recreates instead of hanging on the dead agent.
120
141
  await (options?.deadTransport
@@ -128,6 +149,8 @@ async function disposePoolEntry(entry, options) {
128
149
  // disposal failure should not block session replacement
129
150
  }
130
151
  await entry.sessionStore.dispose().catch(() => undefined);
152
+ // Timeout/rejection is not proof of closure; only successful SDK disposal releases ownership.
153
+ void disposal?.then(entry.releaseAgentClaim, () => { });
131
154
  }
132
155
  async function disposePoolEntryForScope(scopeKey, options) {
133
156
  invalidateScopeCreations(scopeKey);
@@ -252,11 +275,11 @@ function leaseFromEntry(entry, scopeKey, params, created) {
252
275
  },
253
276
  };
254
277
  }
255
- function getCurrentReadyPoolEntry(scopeKey, poolKey) {
278
+ function getCurrentReadyPoolEntry(scopeKey, poolKey, storeRoot) {
256
279
  const current = sessionAgentsByScope.get(scopeKey);
257
280
  if (current?.status !== "ready")
258
281
  return undefined;
259
- if (current.poolKey !== poolKey)
282
+ if (!samePoolIdentity(current, poolKey, storeRoot))
260
283
  return undefined;
261
284
  return current;
262
285
  }
@@ -269,7 +292,7 @@ async function tryLeaseReadyEntry(entry, scopeKey, params, poolKey, created) {
269
292
  await disposePoolEntryForScope(scopeKey);
270
293
  return undefined;
271
294
  }
272
- const readyEntry = getCurrentReadyPoolEntry(scopeKey, poolKey);
295
+ const readyEntry = getCurrentReadyPoolEntry(scopeKey, poolKey, params.storeRoot);
273
296
  if (!readyEntry)
274
297
  return undefined;
275
298
  return leaseFromEntry(readyEntry, scopeKey, params, created);
@@ -277,6 +300,7 @@ async function tryLeaseReadyEntry(entry, scopeKey, params, poolKey, created) {
277
300
  async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, sendState, params) {
278
301
  let bridgeRun;
279
302
  let sessionStore;
303
+ let releaseAgentClaim;
280
304
  try {
281
305
  const registeredBridge = params.bridge;
282
306
  if (registeredBridge) {
@@ -301,13 +325,12 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
301
325
  const resumeHandle = resumeEligible ? getMatchingCursorSessionAgentResumeHandle(resolvedPoolKey, scopeKey) : undefined;
302
326
  const storeSelection = await openCursorSessionStoreForScope({
303
327
  cwd: params.cwd,
304
- scopeKey,
328
+ scopeKey: params.scope?.persistentScopeKey ?? scopeKey,
305
329
  persistent: persistentStore,
306
- hasResumeHandle: resumeHandle !== undefined,
307
- resumeIdentity: resumeHandle?.storeIdentity,
330
+ storeRoot: params.storeRoot,
331
+ resume: resumeHandle ? { identity: resumeHandle.storeIdentity, agentId: resumeHandle.agentId } : undefined,
308
332
  });
309
333
  sessionStore = storeSelection.sessionStore;
310
- const { identities } = storeSelection;
311
334
  const resumeAttemptAllowed = storeSelection.resumeAttemptAllowed;
312
335
  let resumeNotice = storeSelection.resumeFallback ? LOCAL_RESUME_FALLBACK_NOTICE : undefined;
313
336
  const buildAgentOptions = () => ({
@@ -321,22 +344,30 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
321
344
  store: sessionStore.store,
322
345
  }),
323
346
  ...(bridgeRun?.mcpServers ? { mcpServers: bridgeRun.mcpServers } : {}),
347
+ ...(params.agents && Object.keys(params.agents).length ? { agents: params.agents } : {}),
324
348
  });
325
349
  let agent;
326
350
  let effectiveSendState = sendState;
327
351
  let resumed = false;
328
352
  if (resumeHandle && resumeAttemptAllowed && resumeAgent) {
353
+ releaseAgentClaim = claimCursorLocalAgent(sessionStore.identity, resumeHandle.agentId);
354
+ }
355
+ if (resumeHandle && resumeAttemptAllowed && resumeAgent && releaseAgentClaim) {
329
356
  try {
330
357
  agent = await resumeAgent(resumeHandle.agentId, buildAgentOptions());
331
358
  effectiveSendState = { ...resumeHandle.sendState };
332
359
  resumed = true;
333
360
  }
334
361
  catch {
362
+ releaseAgentClaim();
363
+ releaseAgentClaim = undefined;
335
364
  if (persistentStore)
336
365
  resumeNotice = LOCAL_RESUME_FALLBACK_NOTICE;
337
- if (!cursorSessionStoreIdentitiesEqual(sessionStore.identity, identities.sessionStore)) {
366
+ if (storeSelection.persistent && !cursorSessionStoreIdentitiesEqual(sessionStore.identity, storeSelection.identities.sessionStore)) {
367
+ const { identities } = storeSelection;
368
+ const replacement = await openCursorSessionStore(params.cwd, identities.sessionStore, identities.workspaceRoot, identities.storeRoot);
338
369
  await sessionStore.dispose().catch(() => undefined);
339
- sessionStore = await openCursorSessionStore(params.cwd, identities.sessionStore);
370
+ sessionStore = replacement;
340
371
  }
341
372
  }
342
373
  }
@@ -345,9 +376,13 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
345
376
  throw new Error("Cursor SDK agent creation returned no agent");
346
377
  if (!sessionStore)
347
378
  throw new Error("Cursor SDK session store was not opened");
379
+ releaseAgentClaim ??= claimCursorLocalAgent(sessionStore.identity, agent.agentId);
380
+ if (!releaseAgentClaim)
381
+ throw new Error("Cursor SDK agent is already owned by another runtime");
348
382
  return {
349
383
  status: "ready",
350
384
  poolKey: resolvedPoolKey,
385
+ storeRoot: params.storeRoot,
351
386
  instanceId,
352
387
  scopeKey,
353
388
  agent,
@@ -356,6 +391,7 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
356
391
  sendState: effectiveSendState,
357
392
  resumeEnabled: params.localResume === true,
358
393
  resumed,
394
+ releaseAgentClaim,
359
395
  ...(resumeNotice ? { resumeNotice } : {}),
360
396
  };
361
397
  }
@@ -363,6 +399,7 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
363
399
  bridgeRun?.cancel("Cursor session agent create failed");
364
400
  await bridgeRun?.dispose().catch(() => undefined);
365
401
  await sessionStore?.dispose().catch(() => undefined);
402
+ releaseAgentClaim?.();
366
403
  throw error;
367
404
  }
368
405
  }
@@ -373,9 +410,10 @@ export function invalidateSessionAgent(scopeKey = getCursorSessionScopeKey(), op
373
410
  deadTransportScopeKeys.add(scopeKey);
374
411
  }
375
412
  export async function acquireSessionCursorAgent(input) {
376
- const params = { ...input, bridge: "bridge" in input ? input.bridge : getRegisteredCursorPiToolBridge() };
377
- const scopeKey = params.scope?.scopeKey ?? getCursorSessionScopeKey();
378
- const persistentStore = (params.scope ? params.scope.sessionFile : getCursorSessionFile()) !== undefined;
413
+ const params = { ...input, scope: input.scope ?? getCursorSessionScopeSnapshot(), bridge: "bridge" in input ? input.bridge : getRegisteredCursorPiToolBridge() };
414
+ const scopeKey = params.scope.scopeKey;
415
+ const persistentStore = params.scope.sessionFile !== undefined;
416
+ params.storeRoot = persistentStore && params.storeRoot !== undefined ? normalizeCursorCustomStoreRoot(params.storeRoot) : undefined;
379
417
  while (true) {
380
418
  assertScopeAcceptsAcquire(scopeKey);
381
419
  if (invalidatedScopeKeys.has(scopeKey)) {
@@ -383,7 +421,7 @@ export async function acquireSessionCursorAgent(input) {
383
421
  }
384
422
  const poolKey = buildSessionAgentPoolKey(scopeKey, params);
385
423
  const state = getSessionCursorAgentPoolState(scopeKey);
386
- if ((state.status === "ready" || state.status === "busy") && state.poolKey !== poolKey) {
424
+ if ((state.status === "ready" || state.status === "busy") && !samePoolIdentity(state, poolKey, params.storeRoot)) {
387
425
  await disposePoolEntryForScope(scopeKey);
388
426
  continue;
389
427
  }
@@ -398,7 +436,7 @@ export async function acquireSessionCursorAgent(input) {
398
436
  continue;
399
437
  }
400
438
  if (state.status === "creating") {
401
- if (state.poolKey !== poolKey) {
439
+ if (!samePoolIdentity(state, poolKey, params.storeRoot)) {
402
440
  await disposePoolEntryForScope(scopeKey);
403
441
  continue;
404
442
  }
@@ -408,7 +446,7 @@ export async function acquireSessionCursorAgent(input) {
408
446
  catch (error) {
409
447
  if (error instanceof SessionCursorAgentCreationSupersededError) {
410
448
  assertScopeAcceptsAcquire(scopeKey);
411
- rethrowSupersededWhenReplacedByDifferentPoolKey(scopeKey, poolKey, error);
449
+ rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, params.storeRoot, error);
412
450
  continue;
413
451
  }
414
452
  throw error;
@@ -436,6 +474,7 @@ export async function acquireSessionCursorAgent(input) {
436
474
  placeholder = {
437
475
  status: "creating",
438
476
  poolKey,
477
+ storeRoot: params.storeRoot,
439
478
  instanceId,
440
479
  scopeKey,
441
480
  sendState,
@@ -456,7 +495,7 @@ export async function acquireSessionCursorAgent(input) {
456
495
  }
457
496
  if (error instanceof SessionCursorAgentCreationSupersededError) {
458
497
  assertScopeAcceptsAcquire(scopeKey);
459
- rethrowSupersededWhenReplacedByDifferentPoolKey(scopeKey, poolKey, error);
498
+ rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, params.storeRoot, error);
460
499
  continue;
461
500
  }
462
501
  throw error;
@@ -495,8 +534,6 @@ export const __testUtils = {
495
534
  resetSessionCursorAgent,
496
535
  refreshSessionCursorAgentConfig,
497
536
  disposeAllSessionCursorAgents,
498
- buildApiKeyPoolKeyFingerprint,
499
- buildSessionAgentPoolKey,
500
537
  setDeadTransportAgentDisposeTimeoutMs(ms) {
501
538
  const previous = deadTransportAgentDisposeTimeoutMs;
502
539
  deadTransportAgentDisposeTimeoutMs = ms;
@@ -11,23 +11,31 @@ const state = {
11
11
  sessionName: undefined,
12
12
  projectTrusted: false,
13
13
  sessionGeneration: 0,
14
+ runtimeOwner: undefined,
14
15
  };
15
16
  const scopes = new Map();
16
17
  const scopeChangeHandlers = new Map();
17
18
  const scopeGenerations = new Map([[ANONYMOUS_SESSION_SCOPE_KEY, 0]]);
18
19
  const projectTrustResolutionCwds = new Set();
19
20
  let nextSessionGeneration = 1;
21
+ let nextRuntimeOwner = 1;
22
+ let runtimeOwners = new WeakMap();
23
+ function persistentScopeKeyFor(record) {
24
+ return record.sessionFile ?? (record.sessionId ? `${EPHEMERAL_SESSION_SCOPE_PREFIX}${record.sessionId}` : ANONYMOUS_SESSION_SCOPE_KEY);
25
+ }
20
26
  function scopeKeyFor(record) {
21
- if (record.sessionFile)
22
- return record.sessionFile;
23
- if (record.sessionId)
24
- return `${EPHEMERAL_SESSION_SCOPE_PREFIX}${record.sessionId}`;
25
- return ANONYMOUS_SESSION_SCOPE_KEY;
27
+ const persistent = persistentScopeKeyFor(record);
28
+ return record.runtimeOwner === undefined ? persistent : `${persistent}\0runtime:${record.runtimeOwner}`;
26
29
  }
27
30
  export function cursorSessionScopeKeyForManager(manager) {
28
- return manager.getSessionFile?.() ?? (manager.getSessionId?.()
29
- ? `${EPHEMERAL_SESSION_SCOPE_PREFIX}${manager.getSessionId()}`
30
- : ANONYMOUS_SESSION_SCOPE_KEY);
31
+ return persistentScopeKeyFor({
32
+ sessionFile: manager.getSessionFile?.() ?? undefined, sessionId: manager.getSessionId?.(),
33
+ });
34
+ }
35
+ export function cursorRuntimeSessionScopeKeyForManager(manager) {
36
+ const persistent = cursorSessionScopeKeyForManager(manager);
37
+ const owner = runtimeOwners.get(manager);
38
+ return owner === undefined ? persistent : `${persistent}\0runtime:${owner}`;
31
39
  }
32
40
  export function getCursorSessionScopeSnapshot(pi) {
33
41
  if (!pi && scopes.size > 1)
@@ -39,6 +47,7 @@ export function getCursorSessionScopeSnapshot(pi) {
39
47
  return Object.freeze({
40
48
  cwd: record.sessionCwd,
41
49
  scopeKey,
50
+ persistentScopeKey: persistentScopeKeyFor(record),
42
51
  sessionFile: record.sessionFile,
43
52
  sessionId: record.sessionId,
44
53
  sessionName: record.sessionName,
@@ -49,10 +58,7 @@ export function getCursorSessionScopeSnapshot(pi) {
49
58
  export function hasLiveCursorSessions() {
50
59
  return scopes.size > 0;
51
60
  }
52
- export function getCursorSessionFile() {
53
- return state.sessionFile;
54
- }
55
- /** Stable pool key, with process-local anonymous fallback before session_start. */
61
+ /** Runtime ownership key; persisted identities are captured separately. */
56
62
  export function getCursorSessionScopeKey() {
57
63
  return scopeKeyFor(state);
58
64
  }
@@ -73,13 +79,14 @@ function normalizeCursorSessionName(name) {
73
79
  return undefined;
74
80
  return truncateCursorDisplayLine(name, MAX_CURSOR_SESSION_NAME_LENGTH) || undefined;
75
81
  }
76
- function setCursorSessionScope(cwd, sessionFile, sessionId, projectTrusted = false, sessionName) {
82
+ function setCursorSessionScope(cwd, sessionFile, sessionId, projectTrusted = false, sessionName, runtimeOwner) {
77
83
  state.sessionCwd = cwd;
78
84
  state.sessionFile = sessionFile;
79
85
  state.sessionId = sessionId;
80
86
  state.sessionName = normalizeCursorSessionName(sessionName);
81
87
  state.projectTrusted = projectTrusted;
82
88
  state.sessionGeneration = nextSessionGeneration++;
89
+ state.runtimeOwner = runtimeOwner;
83
90
  scopeGenerations.set(scopeKeyFor(state), state.sessionGeneration);
84
91
  }
85
92
  function recordProjectTrustResolution(cwd) {
@@ -92,6 +99,7 @@ function resetCursorSessionScope() {
92
99
  Object.assign(state, {
93
100
  sessionCwd: process.cwd(), sessionFile: undefined, sessionId: undefined,
94
101
  sessionName: undefined, projectTrusted: false, sessionGeneration: 0,
102
+ runtimeOwner: undefined,
95
103
  });
96
104
  nextSessionGeneration = 1;
97
105
  scopeGenerations.clear();
@@ -99,6 +107,8 @@ function resetCursorSessionScope() {
99
107
  projectTrustResolutionCwds.clear();
100
108
  scopes.clear();
101
109
  scopeChangeHandlers.clear();
110
+ runtimeOwners = new WeakMap();
111
+ nextRuntimeOwner = 1;
102
112
  }
103
113
  export function onCursorSessionScopeKeyChange(pi, handler) {
104
114
  scopeChangeHandlers.set(pi, handler);
@@ -108,6 +118,7 @@ export function registerCursorSessionScope(pi) {
108
118
  const record = {
109
119
  sessionCwd: process.cwd(), sessionFile: undefined, sessionId: undefined,
110
120
  sessionName: undefined, projectTrusted: false, sessionGeneration: 0,
121
+ runtimeOwner: undefined,
111
122
  };
112
123
  scopes.set(pi, record);
113
124
  const trustedCwds = new Set();
@@ -118,8 +129,10 @@ export function registerCursorSessionScope(pi) {
118
129
  pi.on("session_start", async (_event, ctx) => {
119
130
  const previousScopeKey = scopeKeyFor(record);
120
131
  const wasBound = record.sessionGeneration > 0;
132
+ if (!runtimeOwners.has(ctx.sessionManager))
133
+ runtimeOwners.set(ctx.sessionManager, nextRuntimeOwner++);
121
134
  setCursorSessionScope(ctx.cwd, ctx.sessionManager?.getSessionFile?.() ?? undefined, ctx.sessionManager?.getSessionId?.() ?? undefined, ctx.isProjectTrusted?.() === true
122
- && (trustedCwds.has(resolve(ctx.cwd)) || projectTrustResolutionCwds.has(resolve(ctx.cwd)) || isCliProjectTrustApproved()), ctx.sessionManager?.getSessionName?.() ?? undefined);
135
+ && (trustedCwds.has(resolve(ctx.cwd)) || projectTrustResolutionCwds.has(resolve(ctx.cwd)) || isCliProjectTrustApproved()), ctx.sessionManager?.getSessionName?.() ?? undefined, runtimeOwners.get(ctx.sessionManager));
123
136
  Object.assign(record, state);
124
137
  scopes.set(pi, record);
125
138
  if (wasBound && previousScopeKey !== scopeKeyFor(record)) {
@@ -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,4 +1,4 @@
1
- import { cursorSessionScopeKeyForManager, getCursorSessionProjectTrusted } from "./cursor-session-scope.js";
1
+ import { cursorRuntimeSessionScopeKeyForManager, getCursorSessionProjectTrusted } from "./cursor-session-scope.js";
2
2
  function createCliSettings() {
3
3
  return {
4
4
  forceFast: false, forceNoFast: false,
@@ -34,7 +34,7 @@ export function getCursorSessionSettings(scopeKey) {
34
34
  }
35
35
  export function cursorSettingsScopeForContext(ctx) {
36
36
  const manager = ctx.sessionManager;
37
- return manager ? cursorSessionScopeKeyForManager(manager) : undefined;
37
+ return manager ? cursorRuntimeSessionScopeKeyForManager(manager) : undefined;
38
38
  }
39
39
  export function registerCursorSessionSettings(pi) {
40
40
  let scopeKey;
@@ -42,7 +42,7 @@ export function registerCursorSessionSettings(pi) {
42
42
  pi.on("session_start", (_event, ctx) => {
43
43
  if (scopeKey)
44
44
  settings.delete(scopeKey);
45
- scopeKey = cursorSessionScopeKeyForManager(ctx.sessionManager);
45
+ scopeKey = cursorRuntimeSessionScopeKeyForManager(ctx.sessionManager);
46
46
  legacySettings = getCursorSessionSettings(scopeKey);
47
47
  // Reload creates a new ExtensionAPI but retains the same public manager.
48
48
  // Keep the run's one-shot CLI consumption without retaining dead managers.