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
package/dist/context.js CHANGED
@@ -25,12 +25,13 @@ export function getCursorToolTailGuardText(options = {}) {
25
25
  : getCursorPlanModeToolGuidanceText(options.agentMode, { includePiBridgeGuidance: options.includePiBridgeGuidance }),
26
26
  "Exact-output requests: output exactly the requested text; no preamble or checks unless asked.",
27
27
  "Tools: call available Cursor SDK/MCP tools; never print tool cards as assistant text.",
28
+ "Do not comment on GitHub issues or PRs unless the user asked.",
28
29
  options.includePiBridgeGuidance === false ? undefined : CURSOR_PI_BRIDGE_PREFERENCE_TEXT,
29
30
  ].filter((line) => line !== undefined).join("\n");
30
31
  }
31
32
  function getCursorToolBoundaryText(options = {}) {
32
33
  const includePiBridgeGuidance = options.includePiBridgeGuidance !== false;
33
- const includePiAskQuestionGuidance = includePiBridgeGuidance && options.includePiAskQuestionGuidance !== false;
34
+ const includePiAskQuestionGuidance = includePiBridgeGuidance && options.includePiAskQuestionGuidance === true;
34
35
  const lines = [
35
36
  "Cursor SDK tool boundary:",
36
37
  "Call only Cursor SDK/MCP tools exposed in this run; pi history names, replay labels, and transcript names are not callable.",
@@ -38,7 +39,7 @@ function getCursorToolBoundaryText(options = {}) {
38
39
  ? "For exposed pi bridge tools, call pi__* MCP names, not pi card/history names."
39
40
  : undefined,
40
41
  "Do not claim pi-side or WebSearch/WebFetch tools unless Cursor ran an equivalent tool.",
41
- includePiAskQuestionGuidance ? "Use pi__cursor_ask_question for material choices if exposed." : undefined,
42
+ includePiAskQuestionGuidance ? "Use pi__cursor_ask_question only if the user asked to be prompted." : undefined,
42
43
  getCursorPlanModeToolGuidanceText(options.agentMode, { includePiBridgeGuidance }),
43
44
  "Images: only latest user images are sent; ask to reattach prior images.",
44
45
  ].filter((line) => line !== undefined);
@@ -47,9 +48,11 @@ function getCursorToolBoundaryText(options = {}) {
47
48
  }
48
49
  return lines.join("\n");
49
50
  }
50
- function getCursorBootstrapTailSections(options = {}) {
51
+ function getCursorBootstrapTailSections(options, hasNewNativeUser = true) {
51
52
  return [
52
- "Answer the latest user request above using the instructions and Cursor SDK capabilities available in this run.",
53
+ hasNewNativeUser
54
+ ? "Answer the latest user request above using the instructions and Cursor SDK capabilities available in this run."
55
+ : "Continue from the pending background context above using Cursor SDK capabilities. No new user request was submitted; earlier user requests are history, not new instructions.",
53
56
  getCursorToolTailGuardText({ ...options, includePlanModeGuidance: false }),
54
57
  ];
55
58
  }
@@ -65,23 +68,11 @@ function isImageBlock(block) {
65
68
  function isToolCallBlock(block) {
66
69
  return block.type === "toolCall";
67
70
  }
68
- function extractLatestImages(messages) {
69
- // Find the last user message and extract images only from it
70
- for (let i = messages.length - 1; i >= 0; i--) {
71
- const msg = messages[i];
72
- if (msg.role !== "user")
73
- continue;
74
- if (typeof msg.content === "string")
75
- return [];
76
- const images = [];
77
- for (const block of msg.content) {
78
- if (isImageBlock(block) && block.data && block.mimeType) {
79
- images.push({ data: block.data, mimeType: block.mimeType });
80
- }
81
- }
82
- return images;
83
- }
84
- return [];
71
+ function extractLatestImages(messages, latestUserIndex = getLatestUserMessageIndex(messages)) {
72
+ const message = messages[latestUserIndex];
73
+ if (!message || message.role !== "user" || typeof message.content === "string")
74
+ return [];
75
+ return message.content.flatMap((block) => isImageBlock(block) && block.data && block.mimeType ? [{ data: block.data, mimeType: block.mimeType }] : []);
85
76
  }
86
77
  function formatContentBlocks(content) {
87
78
  if (typeof content === "string")
@@ -147,17 +138,29 @@ function getLatestUserMessageIndex(messages) {
147
138
  }
148
139
  return -1;
149
140
  }
141
+ export function getCursorPendingInput(messages, nativeSourceRoles) {
142
+ const start = messages.findLastIndex((message) => message.role === "assistant") + 1;
143
+ const latestUserIndex = nativeSourceRoles.findLastIndex((role, index) => index >= start && role === "user");
144
+ return { start, latestUserIndex };
145
+ }
146
+ function formatPromptMessage(message, index, nativeSourceRoles) {
147
+ if (message.role === "user" && nativeSourceRoles && nativeSourceRoles[index] !== "user") {
148
+ const text = formatContentBlocks(message.content);
149
+ return text ? `Background context: ${text}` : undefined;
150
+ }
151
+ return formatMessage(message);
152
+ }
150
153
  function getSectionCost(section) {
151
154
  return section.length + SECTION_SEPARATOR.length;
152
155
  }
153
- function applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages, latestUserMessageIndex, options) {
156
+ function applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages, requiredMessageIndexes, options) {
154
157
  const maxInputTokens = options.maxInputTokens;
155
158
  if (maxInputTokens === undefined || !Number.isFinite(maxInputTokens) || maxInputTokens <= 0) {
156
159
  return [...sectionsBeforeMessages, ...messageSections.map((section) => section.text), ...sectionsAfterMessages];
157
160
  }
158
161
  const charsPerToken = options.charsPerToken ?? CURSOR_APPROX_CHARS_PER_TOKEN;
159
162
  const maxChars = Math.max(1, Math.floor(maxInputTokens * charsPerToken));
160
- const requiredMessageSections = messageSections.filter((section) => section.index === latestUserMessageIndex);
163
+ const requiredMessageSections = messageSections.filter((section) => requiredMessageIndexes.includes(section.index));
161
164
  const requiredCost = [...sectionsBeforeMessages, ...requiredMessageSections.map((section) => section.text), ...sectionsAfterMessages].reduce((total, section) => total + getSectionCost(section), 0);
162
165
  let remainingChars = maxChars - requiredCost;
163
166
  const includedMessageIndexes = new Set(requiredMessageSections.map((section) => section.index));
@@ -272,7 +275,7 @@ export function computeCursorContextFingerprint(context) {
272
275
  };
273
276
  return JSON.stringify(payload);
274
277
  }
275
- export function shouldBootstrapCursorContext(sendState, context) {
278
+ export function shouldBootstrapCursorContext(sendState, context, nativeSourceRoles) {
276
279
  if (!sendState.bootstrapped)
277
280
  return true;
278
281
  const previous = parseCursorContextFingerprint(sendState.contextFingerprint);
@@ -296,9 +299,17 @@ export function shouldBootstrapCursorContext(sendState, context) {
296
299
  if (current.messageHashes[index] !== previous.messageHashes[index])
297
300
  return true;
298
301
  }
299
- // An incremental prompt carries only the latest new user message. Rebootstrap
300
- // if additional model-visible input (such as ! shell output) would be lost.
301
302
  const appended = normalizePiContextMessages(context.messages.slice(previous.messageHashes.length));
303
+ if (nativeSourceRoles) {
304
+ const messages = normalizePiContextMessages(context.messages);
305
+ const offset = messages.length - appended.length;
306
+ // Native summaries invalidate the pool; other pending input travels together.
307
+ if (nativeSourceRoles.slice(offset).some((role) => role === "branchSummary" || role === "compactionSummary"))
308
+ return true;
309
+ const { start } = getCursorPendingInput(messages, nativeSourceRoles);
310
+ return appended.some((message, index) => message.role === "user" && offset + index < start);
311
+ }
312
+ // Without native origin, an incremental prompt carries only the final user.
302
313
  const appendedUsers = appended.filter((message) => message.role === "user");
303
314
  return appended.length > 0 && (appendedUsers.length !== 1 || appended.at(-1)?.role !== "user");
304
315
  }
@@ -309,19 +320,25 @@ export function shouldBootstrapCursorSend(sendState, context) {
309
320
  export function buildCursorIncrementalPrompt(context, options = {}) {
310
321
  // Incremental sends omit Pi system instructions and the full tool boundary; the session agent retains both from bootstrap.
311
322
  const messages = normalizePiContextMessages(context.messages);
312
- const latestUserMessageIndex = getLatestUserMessageIndex(messages);
323
+ const pending = options.nativeSourceRoles && getCursorPendingInput(messages, options.nativeSourceRoles);
324
+ const latestUserMessageIndex = pending ? pending.latestUserIndex : getLatestUserMessageIndex(messages);
313
325
  const latestUserMessage = latestUserMessageIndex >= 0 ? messages[latestUserMessageIndex] : undefined;
314
326
  const latestUserText = latestUserMessage ? formatMessage(latestUserMessage) : undefined;
315
327
  const sectionsBeforeMessages = [
316
328
  "Continue the conversation using Cursor SDK capabilities only. Do not list, promise, or call pi-only tools from earlier context as if they were available.",
317
329
  ];
318
- const latestUserMessageSections = latestUserText && latestUserMessageIndex >= 0 ? [{ index: latestUserMessageIndex, text: latestUserText }] : [];
319
- const images = extractLatestImages(messages);
330
+ const latestUserMessageSections = pending
331
+ ? messages.flatMap((message, index) => {
332
+ const text = index >= pending.start ? formatPromptMessage(message, index, options.nativeSourceRoles) : undefined;
333
+ return text ? [{ index, text }] : [];
334
+ })
335
+ : latestUserText && latestUserMessageIndex >= 0 ? [{ index: latestUserMessageIndex, text: latestUserText }] : [];
336
+ const images = extractLatestImages(messages, latestUserMessageIndex);
320
337
  const imageTokenReserve = images.length * (options.imageTokenEstimate ?? 0);
321
338
  const budgetOptions = options.maxInputTokens === undefined
322
339
  ? options
323
340
  : { ...options, maxInputTokens: Math.max(1, options.maxInputTokens - imageTokenReserve) };
324
- const parts = applyPromptBudget(sectionsBeforeMessages, latestUserMessageSections, [getCursorToolTailGuardText(options)], latestUserMessageIndex, budgetOptions);
341
+ const parts = applyPromptBudget(sectionsBeforeMessages, latestUserMessageSections, [getCursorToolTailGuardText(options)], latestUserMessageSections.map((section) => section.index), budgetOptions);
325
342
  return { text: parts.join(SECTION_SEPARATOR), images };
326
343
  }
327
344
  /** Native compaction/tree instructions are already a complete summarization request. */
@@ -349,17 +366,19 @@ export function buildCursorPrompt(context, options = {}) {
349
366
  const messages = normalizePiContextMessages(context.messages);
350
367
  const messageSections = messages
351
368
  .map((msg, index) => {
352
- const text = formatMessage(msg);
369
+ const text = formatPromptMessage(msg, index, options.nativeSourceRoles);
353
370
  return text ? { index, text } : undefined;
354
371
  })
355
372
  .filter((section) => section !== undefined);
356
- const sectionsAfterMessages = getCursorBootstrapTailSections(options);
357
- const images = extractLatestImages(messages);
373
+ const pending = options.nativeSourceRoles && getCursorPendingInput(messages, options.nativeSourceRoles);
374
+ const sectionsAfterMessages = getCursorBootstrapTailSections(options, !pending || pending.latestUserIndex >= 0);
375
+ const images = extractLatestImages(messages, pending ? pending.latestUserIndex : getLatestUserMessageIndex(messages));
358
376
  const imageTokenReserve = images.length * (options.imageTokenEstimate ?? 0);
359
377
  const budgetOptions = options.maxInputTokens === undefined
360
378
  ? options
361
379
  : { ...options, maxInputTokens: Math.max(1, options.maxInputTokens - imageTokenReserve) };
362
- const parts = applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages, getLatestUserMessageIndex(messages), budgetOptions);
380
+ const parts = applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages, pending ? messageSections.filter((section) => section.index >= pending.start).map((section) => section.index)
381
+ : [getLatestUserMessageIndex(messages)], budgetOptions);
363
382
  const text = parts.join(SECTION_SEPARATOR);
364
383
  return { text, images };
365
384
  }
@@ -1,10 +1,7 @@
1
- import { readStoredCredential } from "@earendil-works/pi-coding-agent";
1
+ import { envApiKeyAuth } from "@earendil-works/pi-ai";
2
+ import { parseEnvBoolean } from "./cursor-env-boolean.js";
2
3
  export const CURSOR_API_KEY_ENV_VAR = "CURSOR_API_KEY";
3
- const CURSOR_PROVIDER_ID = "cursor";
4
- // Non-secret literal sentinel for pi's provider registry. Pi 0.77 treats `$ENV_VAR`
5
- // values as unconfigured when the env var is absent, which hides fallback models
6
- // before `/login`. Keep the provider available and resolve the real key in the
7
- // Cursor provider turn path from pi auth or CURSOR_API_KEY.
4
+ // Legacy no-auth availability policy only; never a configured models.json key.
8
5
  export const CURSOR_API_KEY_CONFIG_VALUE = "pi-cursor-sdk-cursor-api-key-placeholder";
9
6
  const CURSOR_API_KEY_PLACEHOLDERS = new Set([
10
7
  CURSOR_API_KEY_ENV_VAR,
@@ -13,22 +10,40 @@ const CURSOR_API_KEY_PLACEHOLDERS = new Set([
13
10
  CURSOR_API_KEY_CONFIG_VALUE,
14
11
  ]);
15
12
  export function resolveCursorApiKey(apiKey) {
13
+ return normalizeCursorApiKey(apiKey) ?? (apiKey && CURSOR_API_KEY_PLACEHOLDERS.has(apiKey.trim())
14
+ ? normalizeCursorApiKey(process.env.CURSOR_API_KEY) : undefined);
15
+ }
16
+ export function normalizeCursorApiKey(apiKey) {
16
17
  const trimmed = apiKey?.trim();
17
- if (!trimmed)
18
+ if (!trimmed || CURSOR_API_KEY_PLACEHOLDERS.has(trimmed))
18
19
  return undefined;
19
- if (CURSOR_API_KEY_PLACEHOLDERS.has(trimmed))
20
- return process.env.CURSOR_API_KEY?.trim() || undefined;
21
20
  return trimmed;
22
21
  }
23
- function getStoredCursorApiKey() {
24
- try {
25
- const credential = readStoredCredential(CURSOR_PROVIDER_ID);
26
- return resolveCursorApiKey(credential?.type === "api_key" ? credential.key : undefined);
27
- }
28
- catch {
29
- return undefined;
30
- }
22
+ export async function resolveCursorCredentialApiKey(credential, environment) {
23
+ return normalizeCursorApiKey(credential?.key)
24
+ ?? normalizeCursorApiKey(credential?.env?.CURSOR_API_KEY)
25
+ ?? normalizeCursorApiKey(await environment());
31
26
  }
32
- export function resolveCursorRuntimeApiKey() {
33
- return Promise.resolve(getStoredCursorApiKey() ?? resolveCursorApiKey(process.env.CURSOR_API_KEY));
27
+ export function cursorApiKeyAuth() {
28
+ const standard = envApiKeyAuth("Cursor API key", [CURSOR_API_KEY_ENV_VAR]);
29
+ const auth = {
30
+ name: standard.name,
31
+ login: standard.login,
32
+ async check(input) {
33
+ const resolved = await auth.resolve(input);
34
+ return resolved ? { type: "api_key", source: resolved.source } : undefined;
35
+ },
36
+ async resolve({ ctx, credential, signal }) {
37
+ signal.throwIfAborted();
38
+ const key = await resolveCursorCredentialApiKey(credential, () => ctx.env(CURSOR_API_KEY_ENV_VAR));
39
+ signal.throwIfAborted();
40
+ if (key)
41
+ return { auth: { apiKey: key }, env: credential?.env, source: credential ? "stored credential" : CURSOR_API_KEY_ENV_VAR };
42
+ if (!parseEnvBoolean(process.env.PI_CURSOR_HIDE_MODELS_WHEN_LOGGED_OUT, false)) {
43
+ return { auth: { apiKey: CURSOR_API_KEY_CONFIG_VALUE }, source: "fallback" };
44
+ }
45
+ return undefined;
46
+ },
47
+ };
48
+ return auth;
34
49
  }
@@ -59,6 +59,7 @@ export function buildCursorCloudAgentOptions(options) {
59
59
  model: options.modelSelection,
60
60
  mode: options.agentMode,
61
61
  ...(options.name ? { name: options.name } : {}),
62
+ ...(options.agents && Object.keys(options.agents).length ? { agents: options.agents } : {}),
62
63
  cloud,
63
64
  };
64
65
  }
@@ -23,6 +23,7 @@ export const CURSOR_SANDBOX_ENV = "PI_CURSOR_SANDBOX";
23
23
  export const CURSOR_LOCAL_FORCE_ENV = "PI_CURSOR_LOCAL_FORCE";
24
24
  export const CURSOR_LOCAL_RESUME_ENV = "PI_CURSOR_LOCAL_RESUME";
25
25
  export const CURSOR_HTTP1_ENV = "PI_CURSOR_HTTP_1_1";
26
+ export const CURSOR_STATE_ROOT_ENV = "PI_CURSOR_SDK_STATE_ROOT";
26
27
  const TRUST_LEVELS = {
27
28
  cli: "one-shot",
28
29
  environment: "environment",
@@ -107,6 +108,44 @@ function parseCloudEnvironment(value) {
107
108
  parsed.name = name;
108
109
  return Object.keys(parsed).length > 0 ? parsed : undefined;
109
110
  }
111
+ const THINKING_LEVELS = {
112
+ off: true,
113
+ minimal: true,
114
+ low: true,
115
+ medium: true,
116
+ high: true,
117
+ xhigh: true,
118
+ max: true,
119
+ };
120
+ function isCursorSubagentThinkingLevel(value) {
121
+ return typeof value === "string" && Object.hasOwn(THINKING_LEVELS, value);
122
+ }
123
+ function parseCustomSubagents(value) {
124
+ const record = asRecord(value);
125
+ if (!record)
126
+ return undefined;
127
+ const entries = [];
128
+ for (const [name, raw] of Object.entries(record)) {
129
+ // Extension config policy, not an upstream SDK naming restriction.
130
+ if (!/^[A-Za-z][A-Za-z0-9._-]{0,63}$/.test(name))
131
+ continue;
132
+ const entry = asRecord(raw);
133
+ const description = parseNonEmptyString(entry?.description);
134
+ const prompt = parseNonEmptyString(entry?.prompt);
135
+ if (!entry || !description || !prompt)
136
+ continue;
137
+ const model = parseNonEmptyString(entry.model);
138
+ const thinking = entry.thinking;
139
+ entries.push([name, {
140
+ description,
141
+ prompt,
142
+ ...(model ? { model } : {}),
143
+ ...(isCursorSubagentThinkingLevel(thinking) ? { thinking } : {}),
144
+ ...(typeof entry.fast === "boolean" ? { fast: entry.fast } : {}),
145
+ }]);
146
+ }
147
+ return entries.length ? Object.fromEntries(entries) : undefined;
148
+ }
110
149
  export function parseCursorSdkConfig(value) {
111
150
  const record = asRecord(value);
112
151
  if (!record)
@@ -114,6 +153,9 @@ export function parseCursorSdkConfig(value) {
114
153
  const config = {};
115
154
  if (isCursorRuntime(record.runtime))
116
155
  config.runtime = record.runtime;
156
+ const subagents = parseCustomSubagents(record.subagents);
157
+ if (subagents)
158
+ config.subagents = subagents;
117
159
  const fastDefaults = asRecord(record.fastDefaults);
118
160
  if (fastDefaults) {
119
161
  config.fastDefaults = Object.fromEntries(Object.entries(fastDefaults).filter((entry) => typeof entry[1] === "boolean"));
@@ -153,6 +195,8 @@ export function parseCursorSdkConfig(value) {
153
195
  const local = asRecord(record.local);
154
196
  if (local) {
155
197
  const parsedLocal = {};
198
+ if (typeof local.storeRoot === "string" && local.storeRoot.trim())
199
+ parsedLocal.storeRoot = local.storeRoot;
156
200
  if (typeof local.autoReview === "boolean")
157
201
  parsedLocal.autoReview = local.autoReview;
158
202
  if (typeof local.sandbox === "boolean")
@@ -389,6 +433,8 @@ const CLOUD_ORDER = ["cli", "environment", "session", "user", "builtin"];
389
433
  const LOCAL_ORDER = ["cli", "environment", "project", "user", "builtin"];
390
434
  const LOCAL_FORCE_ORDER = ["cli", "environment", "builtin"];
391
435
  const HTTP1_ORDER = ["session", "environment", "user", "builtin"];
436
+ const SUBAGENTS_ORDER = ["project", "user", "builtin"];
437
+ const STORE_ROOT_ORDER = ["environment", "user", "builtin"];
392
438
  function buildFieldLayers(order, values) {
393
439
  return order.map((source) => (source === "builtin" ? resolved("builtin", values.builtin) : valueFrom(source, values[source])));
394
440
  }
@@ -401,6 +447,13 @@ function resolveSafetyField(order, values, risk) {
401
447
  function resolveEnvNamesSafetyField(order, values) {
402
448
  return resolveWithCap(buildFieldLayers(order, values), valueFrom("user", values.user), envNamesCap);
403
449
  }
450
+ export function resolveCursorLocalStoreRoot({ env = process.env, user } = {}) {
451
+ return resolveOrdinaryField(STORE_ROOT_ORDER, {
452
+ environment: env[CURSOR_STATE_ROOT_ENV]?.trim() ? env[CURSOR_STATE_ROOT_ENV] : undefined,
453
+ user: user?.local?.storeRoot?.trim() ? user.local.storeRoot : undefined,
454
+ builtin: undefined,
455
+ });
456
+ }
404
457
  export function cursorSdkConfigFromEnv(env = process.env) {
405
458
  const config = {};
406
459
  const runtime = validateExplicitValue(env[CURSOR_RUNTIME_ENV], CURSOR_RUNTIME_ENV, isCursorRuntime, '"local" or "cloud"');
@@ -483,6 +536,11 @@ export function resolveCursorSdkConfig(options = {}) {
483
536
  user: user?.runtime,
484
537
  builtin: builtIn.runtime,
485
538
  }, (value) => (value === "cloud" ? 1 : 0)),
539
+ subagents: resolveOrdinaryField(SUBAGENTS_ORDER, {
540
+ project: parseCustomSubagents(project?.subagents),
541
+ user: parseCustomSubagents(user?.subagents),
542
+ builtin: undefined,
543
+ }),
486
544
  cloud: {
487
545
  repo: resolveOrdinaryField(CLOUD_ORDER, {
488
546
  cli: cli?.cloud?.repo,
@@ -563,6 +621,7 @@ export function resolveCursorSdkConfig(options = {}) {
563
621
  }),
564
622
  },
565
623
  local: {
624
+ storeRoot: resolveCursorLocalStoreRoot({ env: options.env, user }),
566
625
  autoReview: resolveOrdinaryField(LOCAL_ORDER, {
567
626
  cli: cli?.local?.autoReview,
568
627
  environment: env.local?.autoReview,
@@ -0,0 +1,177 @@
1
+ import { accessSync, closeSync, constants, fchmodSync, fstatSync, lstatSync, mkdirSync, openSync, realpathSync, } from "node:fs";
2
+ import { isAbsolute, join, parse, resolve, sep } from "node:path";
3
+ import { noFollowFlag, openExistingRegularFileNoFollow, sameFileIdentity } from "./cursor-durable-fs.js";
4
+ /** Lexical only: capture selection before acquisition awaits; fileless callers skip it. */
5
+ export function normalizeCursorCustomStoreRoot(value) {
6
+ const root = parse(value).root;
7
+ const components = value.slice(root.length).split(process.platform === "win32" ? /[\\/]/ : sep);
8
+ if (!isAbsolute(value) || !root || value.includes("\0") || components.some(part => part === "." || part === "..") ||
9
+ (process.platform === "win32" && (!/^(?:[A-Za-z]:[\\/]|[\\/]{2}[^\\/]+[\\/][^\\/]+[\\/]?)$/.test(root) ||
10
+ /^[\\/]{2}[?.][\\/]/.test(value)))) {
11
+ throw new Error("Cursor local storeRoot must be a native fully qualified absolute path without dot components or device prefixes");
12
+ }
13
+ const normalized = resolve(value);
14
+ if (normalized === resolve(root))
15
+ throw new Error("Cursor local storeRoot must not be a filesystem or share root");
16
+ return normalized;
17
+ }
18
+ function invalid(path, reason) {
19
+ throw new Error(`Cursor custom local store path ${reason}: ${path}`);
20
+ }
21
+ function statIfPresent(path) {
22
+ try {
23
+ return lstatSync(path);
24
+ }
25
+ catch (error) {
26
+ if (error.code === "ENOENT")
27
+ return undefined;
28
+ throw error;
29
+ }
30
+ }
31
+ function assertDirectory(path, stat, privateDirectory, afterShared) {
32
+ if (!stat.isDirectory())
33
+ invalid(path, "contains a link or non-directory");
34
+ if (process.platform === "win32")
35
+ return;
36
+ const uid = process.getuid();
37
+ if (privateDirectory || afterShared) {
38
+ if (stat.uid !== uid)
39
+ invalid(path, "is not owned by the current user");
40
+ }
41
+ else if (stat.uid !== 0 && stat.uid !== uid)
42
+ invalid(path, "has an untrusted owner");
43
+ const trustedShared = !privateDirectory && !afterShared && stat.uid === 0 && (stat.mode & 0o1000) !== 0;
44
+ if ((stat.mode & 0o022) !== 0 && !trustedShared)
45
+ invalid(path, "is group or other writable");
46
+ if (privateDirectory && (stat.mode & 0o300) !== 0o300)
47
+ invalid(path, "is not owner writable/searchable");
48
+ }
49
+ function restrictPrivateDirectory(path, before) {
50
+ if (process.platform !== "win32") {
51
+ const fd = openSync(path, constants.O_RDONLY | noFollowFlag());
52
+ try {
53
+ const opened = fstatSync(fd);
54
+ if (!opened.isDirectory() || !sameFileIdentity(before, opened) || !sameFileIdentity(opened, lstatSync(path))) {
55
+ invalid(path, "changed while opening");
56
+ }
57
+ fchmodSync(fd, 0o700);
58
+ const after = lstatSync(path);
59
+ if (!after.isDirectory() || !sameFileIdentity(opened, after))
60
+ invalid(path, "changed while restricting permissions");
61
+ }
62
+ finally {
63
+ closeSync(fd);
64
+ }
65
+ }
66
+ accessSync(path, constants.W_OK | constants.X_OK);
67
+ }
68
+ function assertTrustedSystemTarget(target) {
69
+ let path = parse(target).root;
70
+ for (const part of ["", ...target.slice(path.length).split(sep).filter(Boolean)]) {
71
+ path = join(path, part);
72
+ const stat = lstatSync(path);
73
+ if (!stat.isDirectory() || stat.uid !== 0 || ((stat.mode & 0o022) !== 0 && !(stat.mode & 0o1000))) {
74
+ invalid(path, "has an untrusted system-link target");
75
+ }
76
+ }
77
+ }
78
+ /** Verify ancestors before individually creating components; never realpath an arbitrary user tree. */
79
+ export function prepareCursorCustomStoreRoot(selectedRoot) {
80
+ const normalized = normalizeCursorCustomStoreRoot(selectedRoot);
81
+ let path = parse(normalized).root;
82
+ let afterShared = false;
83
+ const components = normalized.slice(path.length).split(sep).filter(Boolean);
84
+ assertDirectory(path, lstatSync(path), false, false);
85
+ for (const [index, part] of components.entries()) {
86
+ path = join(path, part);
87
+ const leaf = index === components.length - 1;
88
+ let stat = statIfPresent(path);
89
+ if (stat?.isSymbolicLink()) {
90
+ if (process.platform === "win32" || leaf || afterShared || stat.uid !== 0)
91
+ invalid(path, "contains a link or non-directory");
92
+ const target = realpathSync(path);
93
+ assertTrustedSystemTarget(target);
94
+ path = target;
95
+ stat = lstatSync(path);
96
+ }
97
+ if (!stat) {
98
+ try {
99
+ mkdirSync(path, { mode: 0o700 });
100
+ }
101
+ catch (error) {
102
+ if (error.code !== "EEXIST")
103
+ throw error;
104
+ }
105
+ stat = lstatSync(path);
106
+ }
107
+ assertDirectory(path, stat, leaf, afterShared);
108
+ if (leaf)
109
+ restrictPrivateDirectory(path, stat);
110
+ if (process.platform !== "win32" && stat.uid === 0 && (stat.mode & 0o022) !== 0)
111
+ afterShared = true;
112
+ }
113
+ return path;
114
+ }
115
+ /** Called after exact admission and again immediately before/after the public pathname-based SDK open. */
116
+ export function guardCursorCustomStorePath(customRoot, stateRoot) {
117
+ if (prepareCursorCustomStoreRoot(customRoot) !== customRoot)
118
+ invalid(customRoot, "changed canonical identity");
119
+ const directories = [{ path: customRoot, stat: lstatSync(customRoot) }];
120
+ let path = customRoot;
121
+ for (const part of stateRoot.slice(customRoot.length + 1).split(sep)) {
122
+ path = join(path, part);
123
+ if (!statIfPresent(path)) {
124
+ try {
125
+ mkdirSync(path, { mode: 0o700 });
126
+ }
127
+ catch (error) {
128
+ if (error.code !== "EEXIST")
129
+ throw error;
130
+ }
131
+ }
132
+ const stat = lstatSync(path);
133
+ assertDirectory(path, stat, true, true);
134
+ restrictPrivateDirectory(path, stat);
135
+ directories.push({ path, stat });
136
+ }
137
+ const leaves = ["index.db", "index.db-wal", "index.db-shm", "index.db-journal"];
138
+ const originalLeaves = new Map();
139
+ const checkLeaves = () => {
140
+ for (const name of leaves) {
141
+ const file = join(stateRoot, name);
142
+ const stat = statIfPresent(file);
143
+ if (!stat) {
144
+ if (name === "index.db" && originalLeaves.has(file))
145
+ invalid(file, "disappeared SQLite file");
146
+ continue;
147
+ }
148
+ if (!stat.isFile() || stat.nlink !== 1)
149
+ invalid(file, "contains a linked or nonregular SQLite file");
150
+ if (process.platform !== "win32" && (stat.uid !== process.getuid() || (stat.mode & 0o022))) {
151
+ invalid(file, "contains an unowned or shared SQLite file");
152
+ }
153
+ const before = originalLeaves.get(file);
154
+ if (before && !sameFileIdentity(before, stat))
155
+ invalid(file, "changed SQLite file identity");
156
+ const fd = openExistingRegularFileNoFollow(file, constants.O_RDWR);
157
+ closeSync(fd);
158
+ originalLeaves.set(file, stat);
159
+ }
160
+ };
161
+ checkLeaves();
162
+ // ponytail: the public SDK uses pathname/lazy checkpoint opens. This guards
163
+ // current-user private contents, not hostile same-user/admin races. Windows
164
+ // rejects Node-visible links/junctions but has no ACL hardening/O_NOFOLLOW
165
+ // equivalent here; use an ACL-protected root. Upgrade with public native APIs.
166
+ return { verify() {
167
+ if (prepareCursorCustomStoreRoot(customRoot) !== customRoot)
168
+ invalid(customRoot, "changed canonical identity");
169
+ for (const { path, stat } of directories) {
170
+ const after = lstatSync(path);
171
+ assertDirectory(path, after, true, true);
172
+ if (!sameFileIdentity(stat, after))
173
+ invalid(path, "changed directory identity");
174
+ }
175
+ checkLeaves();
176
+ } };
177
+ }
@@ -0,0 +1,14 @@
1
+ import { buildCursorModelSelection, getCursorModelMetadata } from "./model-discovery.js";
2
+ export function buildCursorCustomSubagentDefinitions(config) {
3
+ if (!config || !Object.keys(config).length)
4
+ return undefined;
5
+ return Object.fromEntries(Object.entries(config).map(([name, entry]) => [name, {
6
+ description: entry.description,
7
+ prompt: entry.prompt,
8
+ ...(entry.model === undefined ? {} : {
9
+ model: entry.model === "inherit" ? "inherit" : buildCursorModelSelection(entry.model, entry.thinking ?? "off", getCursorModelMetadata(entry.model)?.fastOverride ?? entry.fast),
10
+ }),
11
+ }]));
12
+ }
13
+ // ponytail: SDK 1.0.36 LOCAL conversion keeps only model ID/inherit; it drops params.
14
+ // Upgrade this claim only after the installed public converter preserves them.
@@ -1,4 +1,4 @@
1
- // Generated with @cursor/sdk@1.0.32 from 45 Cursor models.
1
+ // Generated with @cursor/sdk@1.0.36 from 45 Cursor models.
2
2
  // Refresh with: npm run refresh:cursor-snapshots -- --write
3
3
  // Do not add secrets; this file stores public model metadata only.
4
4
  export const FALLBACK_MODEL_ITEMS = [
@@ -1,10 +1,11 @@
1
1
  import { isCursorModel } from "./cursor-model.js";
2
2
  import { registerCursorModelLifecycle } from "./cursor-model-lifecycle.js";
3
3
  import { cursorSessionScopeKeyForManager } from "./cursor-session-scope.js";
4
- export function registerCursorFallbackIssueWarning(pi, issue) {
4
+ export function registerCursorFallbackIssueWarning(pi) {
5
+ let issue;
5
6
  const warnedSessionScopeKeys = new Set();
6
7
  registerCursorModelLifecycle(pi, (ctx) => {
7
- if (!isCursorModel(ctx.model) || !ctx.hasUI)
8
+ if (!issue || !isCursorModel(ctx.model) || !ctx.hasUI)
8
9
  return;
9
10
  const scopeKey = cursorSessionScopeKeyForManager(ctx.sessionManager);
10
11
  if (warnedSessionScopeKeys.has(scopeKey))
@@ -12,4 +13,9 @@ export function registerCursorFallbackIssueWarning(pi, issue) {
12
13
  warnedSessionScopeKeys.add(scopeKey);
13
14
  ctx.ui.notify(issue.message, "warning");
14
15
  });
16
+ return (nextIssue) => {
17
+ if (nextIssue?.reason !== issue?.reason || nextIssue?.message !== issue?.message)
18
+ warnedSessionScopeKeys.clear();
19
+ issue = nextIssue;
20
+ };
15
21
  }
@@ -171,6 +171,11 @@ export function createCursorLiveRunCoordinator(deps) {
171
171
  leased: false,
172
172
  leaseQueue: [],
173
173
  });
174
+ const state = getPrivateState(run);
175
+ state.pendingCallUnsubscribers = [...new Set([run.bridgeRun, run.sessionBridgeRun])].flatMap((bridge) => bridge ? [bridge.onPendingToolCallsChanged(() => {
176
+ if (state.idleDisposeRequested || state.idleDisposeTimer)
177
+ coordinator.requestIdleDispose(run);
178
+ })] : []);
174
179
  pendingRuns.set(run.id, run);
175
180
  pendingRunIdsByScopeKey.set(sessionAgentScopeKey, run.id);
176
181
  return run;
@@ -343,10 +348,16 @@ export function createCursorLiveRunCoordinator(deps) {
343
348
  const state = getPrivateState(run);
344
349
  clearIdleDisposeTimer(run);
345
350
  state.idleDisposeRequested = true;
346
- if (state.leased || state.leaseQueue.length > 0)
351
+ if (state.leased || state.leaseQueue.length > 0 ||
352
+ [run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls()))
347
353
  return;
348
- state.idleDisposeRequested = false;
349
354
  state.idleDisposeTimer = setTimeout(() => {
355
+ state.idleDisposeTimer = undefined;
356
+ if (state.leased || state.leaseQueue.length > 0 ||
357
+ [run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls())) {
358
+ coordinator.requestIdleDispose(run);
359
+ return;
360
+ }
350
361
  void coordinator.release(run).catch(() => {
351
362
  // Idle dispose must not leave release failures as unhandled rejections.
352
363
  });
@@ -362,6 +373,15 @@ export function createCursorLiveRunCoordinator(deps) {
362
373
  return;
363
374
  const abandoned = !isSuccessfulCursorLiveRun(run);
364
375
  run.disposed = true;
376
+ for (const unsubscribe of state.pendingCallUnsubscribers ?? []) {
377
+ try {
378
+ unsubscribe();
379
+ }
380
+ catch {
381
+ // Cleanup continues even if an observer cannot detach.
382
+ }
383
+ }
384
+ state.pendingCallUnsubscribers = [];
365
385
  unregister(run);
366
386
  clearIdleDisposeTimer(run);
367
387
  state.idleDisposeRequested = false;
@@ -60,7 +60,9 @@ export function isCursorSdkMcpToolTimeoutStack(stack) {
60
60
  export function isCursorSdkMcpConnectTimeoutStack(stack) {
61
61
  if (!stack || !isCursorSdkMcpProtocolTimeoutStack(stack))
62
62
  return false;
63
- return /\bClient\.(?:connect|listTools)\b|\bMcpSdkClient\.getTools\b/.test(stack);
63
+ // SDK 1.0.36 minifies the Client class name; the protocol method and SDK
64
+ // frame, not that constructor's spelling, establish this timeout purpose.
65
+ return /^\s*at (?:[\w$]+\.)?(?:connect|listTools|getTools)\s*\(.*(?:node_modules[/\\]@cursor[/\\]sdk|@cursor\/sdk\/dist)/m.test(stack);
64
66
  }
65
67
  function isCursorSdkDefaultMcpTimeout(delay) {
66
68
  return typeof delay === "number" && delay === CURSOR_SDK_MCP_DEFAULT_TIMEOUT_MS;