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
@@ -20,6 +20,7 @@ export class CursorPiToolBridgeRunImpl {
20
20
  knownMcpToolNames;
21
21
  knownCursorMcpCallIds = new Set();
22
22
  queuedRequests = [];
23
+ pendingToolCallListeners = new Set();
23
24
  pendingByPiToolCallId = new Map();
24
25
  pendingByBridgeCallId = new Map();
25
26
  pendingByCursorMcpCallId = new Map();
@@ -129,6 +130,23 @@ export class CursorPiToolBridgeRunImpl {
129
130
  hasPendingPiToolCallId(piToolCallId) {
130
131
  return this.pendingByPiToolCallId.has(piToolCallId);
131
132
  }
133
+ hasPendingToolCalls() {
134
+ return this.pendingCount() > 0;
135
+ }
136
+ onPendingToolCallsChanged(listener) {
137
+ this.pendingToolCallListeners.add(listener);
138
+ return () => { this.pendingToolCallListeners.delete(listener); };
139
+ }
140
+ notifyPendingToolCallsChanged() {
141
+ for (const listener of this.pendingToolCallListeners) {
142
+ try {
143
+ listener();
144
+ }
145
+ catch {
146
+ // Observers must not prevent call registration or protocol settlement.
147
+ }
148
+ }
149
+ }
132
150
  cancelPendingPiToolCallId(piToolCallId, reason) {
133
151
  const pending = this.pendingByPiToolCallId.get(piToolCallId);
134
152
  if (!pending)
@@ -173,6 +191,7 @@ export class CursorPiToolBridgeRunImpl {
173
191
  return;
174
192
  this.disposed = true;
175
193
  this.cancel("Cursor pi tool bridge run disposed");
194
+ this.pendingToolCallListeners.clear();
176
195
  await waitForProtocolFlush();
177
196
  await Promise.allSettled([
178
197
  this.mcpTransport?.close(),
@@ -241,6 +260,7 @@ export class CursorPiToolBridgeRunImpl {
241
260
  this.pendingByBridgeCallId.set(request.bridgeCallId, pending);
242
261
  this.pendingByCursorMcpCallId.set(cursorMcpCallId, pending);
243
262
  this.knownCursorMcpCallIds.add(cursorMcpCallId);
263
+ this.notifyPendingToolCallsChanged();
244
264
  pending.timeout = setTimeout(() => {
245
265
  const reason = `Cursor pi bridge CallTool timed out after ${this.callTimeoutMs} ms`;
246
266
  this.rejectAndAbortPending(pending, new Error(reason));
@@ -352,5 +372,6 @@ export class CursorPiToolBridgeRunImpl {
352
372
  const queuedIndex = this.queuedRequests.findIndex((request) => request.bridgeCallId === pending.request.bridgeCallId);
353
373
  if (queuedIndex >= 0)
354
374
  this.queuedRequests.splice(queuedIndex, 1);
375
+ this.notifyPendingToolCallsChanged();
355
376
  }
356
377
  }
@@ -1,5 +1,6 @@
1
1
  import { createServer } from "node:http";
2
2
  import { asRecord } from "./cursor-record-utils.js";
3
+ import { CursorPiToolBridgeRunImpl } from "./cursor-pi-tool-bridge-run.js";
3
4
  import { buildCursorPiToolBridgeSnapshot, buildCursorPiToolBridgeSurfaceSignature, createEmptySnapshot, resolveCursorPiToolBridgeBuiltinsEnabled, resolveCursorPiToolBridgeEnabled, } from "./cursor-pi-tool-bridge-snapshot.js";
4
5
  export const LOOPBACK_HOST = "127.0.0.1";
5
6
  const HTTP_SERVER_CLOSE_GRACE_MS = 250;
@@ -33,7 +34,6 @@ export class CursorPiToolBridgeRegistry {
33
34
  exposeOverlappingBuiltins: resolveCursorPiToolBridgeBuiltinsEnabled(this.env),
34
35
  })
35
36
  : createEmptySnapshot();
36
- const { CursorPiToolBridgeRunImpl } = await import("./cursor-pi-tool-bridge-run.js");
37
37
  const run = new CursorPiToolBridgeRunImpl(this, this.env, snapshot, bridgeEnabled && snapshot.tools.length > 0, options);
38
38
  this.runs.add(run);
39
39
  await run.start();
@@ -1,4 +1,6 @@
1
- import { CURSOR_API_KEY_CONFIG_VALUE } from "./cursor-api-key.js";
1
+ import { cursorApiKeyAuth, normalizeCursorApiKey, resolveCursorCredentialApiKey } from "./cursor-api-key.js";
2
+ import { discoverModels } from "./model-discovery.js";
3
+ import { clearModelListCache } from "./model-list-cache.js";
2
4
  import { captureCursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
3
5
  import { captureCursorUsageRecorder } from "./cursor-usage-ledger.js";
4
6
  import { getCursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
@@ -6,15 +8,17 @@ import { getRegisteredCursorPiToolBridge } from "./cursor-pi-tool-bridge.js";
6
8
  import { createCursorLazyStream } from "./cursor-provider-lazy.js";
7
9
  import { getCursorSessionScopeSnapshot } from "./cursor-session-scope.js";
8
10
  import { captureCursorRequestProjection, resolveCursorRequestProvenance } from "./cursor-request-provenance.js";
9
- export const CURSOR_PROVIDER_OWNERSHIP_ERROR = "Cursor provider ownership is unavailable: this request does not belong to the active Cursor registration. Bind this session's extensions and refresh Cursor models/reload it; use independent ModelRuntime instances for sibling sessions.";
11
+ export const CURSOR_PROVIDER_OWNERSHIP_ERROR = "Cursor provider ownership is unavailable: this request does not belong to the active Cursor registration. Reload this session's extensions to restore its Cursor registration; use independent ModelRuntime instances for sibling sessions.";
10
12
  const requestOwners = new WeakMap();
11
13
  /** One closure per ExtensionAPI, including direct compaction/tree/bug-report streams. */
12
14
  export function registerCursorProviderBinding(pi) {
13
15
  const binding = { active: false, closed: false };
16
+ let registry;
14
17
  const operations = new WeakMap();
15
18
  pi.on("session_before_compact", (event) => { operations.set(event.signal, "compaction"); });
16
19
  pi.on("session_before_tree", (event) => { operations.set(event.signal, "tree"); });
17
20
  pi.on("before_provider_headers", (event, ctx) => {
21
+ const notices = new Set();
18
22
  // Pi's SDK supplies this session-owned callback for ordinary and auxiliary
19
23
  // streams. ModelRuntime forwards the same real headers object to the provider.
20
24
  requestOwners.set(event.headers, {
@@ -22,6 +26,18 @@ export function registerCursorProviderBinding(pi) {
22
26
  scope: getCursorSessionScopeSnapshot(pi),
23
27
  projection: captureCursorRequestProjection(ctx.sessionManager),
24
28
  usageRecorder: captureCursorUsageRecorder(pi, ctx),
29
+ reportSdkNotice: (kind, message) => {
30
+ if (!binding.active || binding.closed)
31
+ return false;
32
+ if (notices.has(kind))
33
+ return;
34
+ pi.appendEntry("pi-cursor-sdk:capability-notice", { kind, message });
35
+ if (ctx.hasUI)
36
+ ctx.ui.notify(message, "warning");
37
+ else
38
+ console.warn(message);
39
+ notices.add(kind);
40
+ },
25
41
  });
26
42
  });
27
43
  const stream = createCursorLazyStream((model, context, options) => {
@@ -42,17 +58,61 @@ export function registerCursorProviderBinding(pi) {
42
58
  bridge: getRegisteredCursorPiToolBridge(pi),
43
59
  nativeDisplay: getCursorNativeToolDisplayState(pi),
44
60
  recordCloudLifecycle: captureCursorCloudLifecycleRecorder(pi),
61
+ reportSdkNotice: owner.reportSdkNotice,
45
62
  };
46
63
  });
47
- pi.on("session_start", () => { if (!binding.closed)
48
- binding.active = true; });
49
- pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; });
50
- return (models) => {
64
+ pi.on("session_start", async (_event, ctx) => {
51
65
  if (binding.closed)
52
66
  return;
53
- pi.registerProvider("cursor", {
54
- name: "Cursor", baseUrl: "https://cursor.com", apiKey: CURSOR_API_KEY_CONFIG_VALUE,
55
- api: "cursor-sdk", models, streamSimple: stream,
56
- });
67
+ binding.active = true;
68
+ registry = ctx.modelRegistry;
69
+ // The genuine extension context supplies composed config auth; startup
70
+ // selection already has the known baseline, without reading a default store.
71
+ await registry.refresh({ providers: ["cursor"], allowNetwork: false });
72
+ });
73
+ pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; registry = undefined; });
74
+ return (models, onCatalog) => {
75
+ if (binding.closed)
76
+ return;
77
+ const toNative = (definitions) => definitions.map(({ compat: _compat, ...definition }) => ({
78
+ ...definition, provider: "cursor", api: "cursor-sdk", baseUrl: "https://cursor.com",
79
+ }));
80
+ let current = toNative(models);
81
+ const provider = {
82
+ id: "cursor", name: "Cursor", baseUrl: "https://cursor.com",
83
+ auth: { apiKey: cursorApiKeyAuth() },
84
+ getModels: () => current,
85
+ stream: stream,
86
+ streamSimple: stream,
87
+ async refreshModels(context) {
88
+ if (binding.closed)
89
+ return;
90
+ const resolved = await registry?.getProviderAuth("cursor");
91
+ context.signal.throwIfAborted();
92
+ const credential = context.credential;
93
+ const apiKey = registry
94
+ ? normalizeCursorApiKey(resolved?.auth.apiKey)
95
+ : credential && credential.type !== "api_key" ? undefined
96
+ : await resolveCursorCredentialApiKey(credential, async () => process.env.CURSOR_API_KEY);
97
+ let issue;
98
+ await discoverModels({
99
+ apiKey, allowNetwork: context.allowNetwork, forceRefresh: context.force, signal: context.signal,
100
+ onFallback: (next) => { issue = next; },
101
+ publish: (definitions, update) => context.publish({
102
+ update: () => {
103
+ if (binding.closed)
104
+ return;
105
+ update();
106
+ current = toNative(definitions);
107
+ // Do not infer logout before native composed auth is reachable.
108
+ if (registry && !apiKey)
109
+ clearModelListCache();
110
+ onCatalog(issue);
111
+ },
112
+ }),
113
+ });
114
+ },
115
+ };
116
+ pi.registerProvider(provider);
57
117
  };
58
118
  }
@@ -120,7 +120,11 @@ function collectConnectErrorStacks(error, record) {
120
120
  }
121
121
  function isConnectError(error, record) {
122
122
  const name = error instanceof Error ? error.name : getErrorStringField(record, "name");
123
- return name === "ConnectError";
123
+ if (name === "ConnectError")
124
+ return true;
125
+ // @cursor/sdk convertConnectError re-wraps backend ConnectErrors (name -> NetworkError,
126
+ // code -> "unavailable") and leaves the original ConnectError on `.cause` without outer details.
127
+ return getErrorStringField(asRecord(record?.cause), "name") === "ConnectError";
124
128
  }
125
129
  function isUnauthenticatedConnectCode(code) {
126
130
  return code === 16 || (typeof code === "string" && /^(?:16|unauthenticated)$/i.test(code));
@@ -133,11 +137,10 @@ function isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence) {
133
137
  /(?:operation was aborted|canceled)/i.test(evidence) &&
134
138
  /(?:AbortError|operation was aborted)/i.test(`${evidence}\n${stackEvidence}`) &&
135
139
  stackEvidence.includes("@cursor/sdk") &&
136
- stackEvidence.includes("@connectrpc/connect-node") &&
137
140
  /\b(?:onStall|reportStall|StallDetected)\b/i.test(stackEvidence));
138
141
  }
139
142
  /**
140
- * @cursor/sdk@1.0.32 throws internal RetriableError (name/kind "RetriableError") with message
143
+ * @cursor/sdk@1.0.36 throws internal RetriableError (name/kind "RetriableError") with message
141
144
  * "Connection stalled" or "Connection stalled repeatedly" after fetchWithRetry exhausts stalls.
142
145
  * The ConnectError is only the cause; the top-level error is not a ConnectError.
143
146
  */
@@ -154,25 +157,23 @@ export function isCursorSdkConnectionStalledError(error) {
154
157
  const stack = getErrorStack(error, record);
155
158
  return /(?:^|[\\/])node_modules[\\/]@cursor[\\/]sdk[\\/]dist[\\/]/.test(stack) || stack.includes("@cursor/sdk");
156
159
  }
157
- function isCursorExtensionConnectStack(stack) {
158
- // pi runs Cursor SDK in Node, where the SDK dynamically imports connect-node.
159
- // connect-web is the SDK's Bun/Deno path and is intentionally not classified for supported pi runs.
160
- return stack.includes("@connectrpc/connect-node") && /(?:^|[\\/])pi-cursor-sdk(?:[\\/]|$)/.test(stack);
161
- }
162
160
  function getCursorConnectSource(error, record) {
163
- const stack = getErrorStack(error, record);
161
+ const stack = collectConnectErrorStacks(error, record);
162
+ // Node/Bun use the SDK's vendored transport; Deno uses connect-web.
164
163
  if (stack.includes("@cursor/sdk"))
165
164
  return "cursor-sdk-stack";
166
- if (isCursorExtensionConnectStack(stack))
167
- return "cursor-extension-connect-stack";
168
- const details = Array.isArray(record?.details) ? record.details : [];
169
- const hasCursorBackendDetails = details.some((detail) => {
170
- const type = getErrorStringField(asRecord(detail), "type");
171
- return typeof type === "string" && type.startsWith("aiserver.");
172
- });
173
- if (hasCursorBackendDetails)
174
- return "cursor-backend-details";
175
- return stack.includes("@connectrpc/connect-node") ? "connect-node-stack" : "generic-connect";
165
+ let current = record;
166
+ for (let depth = 0; depth < 3 && current; depth += 1) {
167
+ const details = Array.isArray(current.details) ? current.details : [];
168
+ const hasCursorBackendDetails = details.some((detail) => {
169
+ const type = getErrorStringField(asRecord(detail), "type");
170
+ return typeof type === "string" && type.startsWith("aiserver.");
171
+ });
172
+ if (hasCursorBackendDetails)
173
+ return "cursor-backend-details";
174
+ current = asRecord(current.cause);
175
+ }
176
+ return "generic-connect";
176
177
  }
177
178
  export function classifyCursorConnectError(error) {
178
179
  const record = asRecord(error);
@@ -186,16 +187,22 @@ export function classifyCursorConnectError(error) {
186
187
  const stack = getErrorStack(error, record);
187
188
  const evidence = collectConnectErrorEvidence(error, record);
188
189
  const stackEvidence = collectConnectErrorStacks(error, record);
189
- if ((code === 1 || code === "canceled") &&
190
- Boolean(rawMessage && /(?:operation was aborted|canceled)/i.test(rawMessage)) &&
191
- (causeName === "AbortError" || /AbortError/.test(stack)) &&
192
- stack.includes("@cursor/sdk") &&
193
- stack.includes("@connectrpc/connect-node")) {
194
- return { kind: "abort", source: "cursor-sdk-stack" };
195
- }
196
190
  if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
197
191
  return { kind: "network", source: getCursorConnectSource(error, record) };
198
192
  }
193
+ const directAbort = (code === 1 || code === "canceled") &&
194
+ (causeName === "AbortError" || /AbortError/.test(stack));
195
+ // The vendored 1.0.36 transport wraps a canceled ConnectError as Unknown.
196
+ // Require the observed canceled -> AbortError cause chain, not generic text.
197
+ const wrappedAbort = (code === 2 || code === "unknown") &&
198
+ causeName === "ConnectError" &&
199
+ (cause?.code === 1 || cause?.code === "canceled") &&
200
+ asRecord(cause?.cause)?.name === "AbortError";
201
+ if ((directAbort || wrappedAbort) &&
202
+ Boolean(rawMessage && /(?:operation was aborted|canceled)/i.test(rawMessage)) &&
203
+ stack.includes("@cursor/sdk")) {
204
+ return { kind: "abort", source: "cursor-sdk-stack" };
205
+ }
199
206
  if (isUnauthenticatedConnectCode(code) || isLikelyAuthError(evidence)) {
200
207
  return { kind: "unauthenticated", source: getCursorConnectSource(error, record) };
201
208
  }
@@ -10,8 +10,14 @@ import { formatCursorSdkAbortMessage, resolveCursorSdkAbortCause } from "./curso
10
10
  import { formatInactiveCursorReplayTrace } from "./cursor-native-replay-trace.js";
11
11
  import { partitionNativeToolsByActiveContext } from "./cursor-native-replay-routing.js";
12
12
  export const DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS = 5 * 60 * 1000;
13
+ function parseCursorNativeReplayIdleDisposeMs(raw) {
14
+ if (!raw || /[^0-9]/.test(raw))
15
+ return DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
16
+ const value = Number(raw);
17
+ return value >= 1 && value <= 2147483647 ? value : DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
18
+ }
13
19
  const CURSOR_NATIVE_REPLAY_TOOL_ID_PATTERN = /^(cursor-replay-\d+-\d+)-tool-\d+$/;
14
- let cursorNativeReplayIdleDisposeMs = DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
20
+ let cursorNativeReplayIdleDisposeMsOverride;
15
21
  let cursorNativeReplayCounter = 0;
16
22
  export async function abandonSessionCursorAgent(scopeKey) {
17
23
  if (!scopeKey)
@@ -19,7 +25,7 @@ export async function abandonSessionCursorAgent(scopeKey) {
19
25
  await resetSessionCursorAgent(scopeKey);
20
26
  }
21
27
  export const cursorLiveRuns = createCursorLiveRunCoordinator({
22
- getIdleDisposeMs: () => cursorNativeReplayIdleDisposeMs,
28
+ getIdleDisposeMs: () => cursorNativeReplayIdleDisposeMsOverride ?? parseCursorNativeReplayIdleDisposeMs(process.env.PI_CURSOR_LIVE_RUN_IDLE_DISPOSE_MS),
23
29
  deleteNativeToolDisplay: deleteCursorNativeToolDisplay,
24
30
  abandonSessionAgent: (scopeKey) => abandonSessionCursorAgent(scopeKey),
25
31
  });
@@ -407,10 +413,10 @@ export async function drainExistingCursorLiveRunBeforeSend(stream, partial, mode
407
413
  }
408
414
  }
409
415
  export function setCursorNativeReplayIdleDisposeMs(value) {
410
- cursorNativeReplayIdleDisposeMs = value;
416
+ cursorNativeReplayIdleDisposeMsOverride = value;
411
417
  }
412
418
  export function resetCursorNativeReplayIdleDisposeMs() {
413
- cursorNativeReplayIdleDisposeMs = DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
419
+ cursorNativeReplayIdleDisposeMsOverride = undefined;
414
420
  }
415
421
  export async function releaseAllPendingCursorLiveRunsForTests() {
416
422
  while (cursorLiveRuns.count() > 0) {
@@ -84,12 +84,12 @@ export class CursorRunFinalizer {
84
84
  this.terminalApplied = true;
85
85
  }
86
86
  async cleanup(prepared, sendResult, liveCompletion) {
87
- this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
88
87
  const abortRegistration = sendResult?.abortRegistration;
89
88
  this.params.runnerParams.sdkEventDebugRef.current = undefined;
90
89
  if (liveCompletion) {
91
90
  void liveCompletion.waitCompletion
92
91
  .finally(async () => {
92
+ this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
93
93
  if (abortRegistration) {
94
94
  this.safeCleanup(() => abortRegistration.signal.removeEventListener("abort", abortRegistration.listener));
95
95
  }
@@ -99,6 +99,7 @@ export class CursorRunFinalizer {
99
99
  .catch(() => { });
100
100
  return;
101
101
  }
102
+ this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
102
103
  if (abortRegistration) {
103
104
  this.safeCleanup(() => abortRegistration.signal.removeEventListener("abort", abortRegistration.listener));
104
105
  }
@@ -4,12 +4,13 @@ import { installCursorMcpToolTimeoutOverride } from "./cursor-mcp-timeout-overri
4
4
  import { ensureCursorRipgrepPath } from "./cursor-ripgrep-path.js";
5
5
  import { installCursorSdkOutputFilter, suppressCursorSdkOutput } from "./cursor-sdk-output-filter.js";
6
6
  import { acquireSessionCursorAgent, buildCursorSessionSendPrompt, planCursorSessionSend, resetSessionCursorAgent, } from "./cursor-session-agent.js";
7
- import { buildCursorPrompt, estimateCursorPromptTokens } from "./context.js";
7
+ import { buildCursorPrompt, estimateCursorPromptTokens, getCursorPendingInput } from "./context.js";
8
8
  import { getCursorPromptOptions } from "./cursor-usage-accounting.js";
9
9
  import { getActiveContextToolNames } from "./cursor-context-tools.js";
10
10
  import { abandonSessionCursorAgent, createCursorNativeReplayId, cursorLiveRuns, getActiveCursorLiveRunForCurrentScope, } from "./cursor-provider-live-run-drain.js";
11
11
  import { getCursorProviderAgentModeOrThrow, getEffectiveFastForModelId, } from "./cursor-state.js";
12
12
  import { resolveEffectiveCursorConfig } from "./cursor-runtime-state.js";
13
+ import { buildCursorCustomSubagentDefinitions } from "./cursor-custom-subagent-definitions.js";
13
14
  import { buildCursorModelSelection } from "./model-discovery.js";
14
15
  import { getEffectiveCursorSettingSources } from "./cursor-setting-sources.js";
15
16
  import { formatCursorCloudPreflightError, buildCursorCloudAgentOptions, preflightCursorCloudRuntime, } from "./cursor-cloud-options.js";
@@ -24,13 +25,17 @@ import { CursorSdkTurnCoordinator } from "./cursor-provider-turn-coordinator.js"
24
25
  import { resolveCursorApiKey } from "./cursor-api-key.js";
25
26
  import { loadCursorSdk } from "./cursor-sdk-runtime.js";
26
27
  import { prepareCursorSummaryProviderTurn } from "./cursor-provider-turn-summary.js";
27
- function buildCursorCloudPromptContext(context, handoff) {
28
+ function buildCursorCloudPromptContext(context, handoff, nativeSourceRoles) {
28
29
  if (handoff === "bootstrap")
29
30
  return context;
30
31
  // Fresh cloud runs omit history, not the current Pi instructions. Replay before
31
32
  // selecting the user message, otherwise transcript-only inputs lose the prompt.
32
33
  const current = resolveCursorPiContext(context);
33
34
  const messages = getCursorConversationMessages(context);
35
+ if (nativeSourceRoles) {
36
+ const { start } = getCursorPendingInput(messages, nativeSourceRoles);
37
+ return { ...current, messages: messages.slice(start) };
38
+ }
34
39
  for (let index = messages.length - 1; index >= 0; index -= 1) {
35
40
  const message = messages[index];
36
41
  if (message.role === "user")
@@ -61,7 +66,7 @@ function buildLocalCursorProviderTurnLifecycle(lease, scopeKey) {
61
66
  };
62
67
  }
63
68
  async function prepareCursorCloudProviderTurn(prepareParams) {
64
- const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled } = prepareParams;
69
+ const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled, agents, customSubagentNames } = prepareParams;
65
70
  const { model, context, options } = params;
66
71
  let restoreCursorSdkOutputFilter;
67
72
  let cloudAgentForCleanup;
@@ -84,13 +89,16 @@ async function prepareCursorCloudProviderTurn(prepareParams) {
84
89
  }
85
90
  const { Agent } = await loadCursorSdk();
86
91
  restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
92
+ const promptContext = buildCursorCloudPromptContext(context, resolvedConfig.cloud.contextHandoff.value, params.request.nativeSourceRoles);
93
+ const nativeSourceRoles = params.request.nativeSourceRoles;
87
94
  const promptOptions = {
88
95
  ...getCursorPromptOptions(model),
96
+ nativeSourceRoles: nativeSourceRoles?.slice(nativeSourceRoles.length - getCursorConversationMessages(promptContext).length),
89
97
  agentMode,
90
98
  includePiBridgeGuidance: false,
91
99
  includePiAskQuestionGuidance: false,
92
100
  };
93
- const prompt = buildCursorPrompt(buildCursorCloudPromptContext(context, resolvedConfig.cloud.contextHandoff.value), promptOptions);
101
+ const prompt = buildCursorPrompt(promptContext, promptOptions);
94
102
  const promptInputTokens = estimateCursorPromptTokens(prompt, promptOptions);
95
103
  const agent = await suppressCursorSdkOutput(() => Agent.create(buildCursorCloudAgentOptions({
96
104
  apiKey: resolvedApiKey,
@@ -98,6 +106,7 @@ async function prepareCursorCloudProviderTurn(prepareParams) {
98
106
  agentMode,
99
107
  resolvedConfig,
100
108
  name: params.scope.sessionName,
109
+ agents,
101
110
  })));
102
111
  cloudAgentForCleanup = agent;
103
112
  if (!params.recordCloudLifecycle({ agentId: agent.agentId }, resolvedApiKey)) {
@@ -133,6 +142,7 @@ async function prepareCursorCloudProviderTurn(prepareParams) {
133
142
  promptOptions,
134
143
  agentMode,
135
144
  localForce: false,
145
+ ...(customSubagentNames ? { customSubagentNames } : {}),
136
146
  });
137
147
  completed = true;
138
148
  cloudAgentForCleanup = undefined;
@@ -172,7 +182,7 @@ async function prepareCursorCloudProviderTurn(prepareParams) {
172
182
  }
173
183
  }
174
184
  async function prepareCursorLocalProviderTurn(prepareParams) {
175
- const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled } = prepareParams;
185
+ const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled, agents, customSubagentNames } = prepareParams;
176
186
  const { model, context, options } = params;
177
187
  let restoreCursorSdkOutputFilter;
178
188
  let sessionAgentScopeKey;
@@ -201,7 +211,9 @@ async function prepareCursorLocalProviderTurn(prepareParams) {
201
211
  modelSelection: selection,
202
212
  settingSources,
203
213
  localSafety,
214
+ agents,
204
215
  localResume: resolvedConfig.local.resume.value,
216
+ storeRoot: resolvedConfig.local.storeRoot.value,
205
217
  useHttp1ForAgent,
206
218
  debugRecorder: sdkEventDebug,
207
219
  onBridgeToolRequest: (request) => {
@@ -222,9 +234,10 @@ async function prepareCursorLocalProviderTurn(prepareParams) {
222
234
  const buildPromptOptions = (plan) => {
223
235
  const promptOptions = {
224
236
  ...getCursorPromptOptions(model),
237
+ nativeSourceRoles: params.request.nativeSourceRoles,
225
238
  agentMode,
226
239
  includePiBridgeGuidance,
227
- includePiAskQuestionGuidance: bridgeToolNames.has("pi__cursor_ask_question"),
240
+ includePiAskQuestionGuidance: false,
228
241
  };
229
242
  if (plan.mode !== "bootstrap" || !resolveCursorToolManifestEnabled()) {
230
243
  return promptOptions;
@@ -238,7 +251,7 @@ async function prepareCursorLocalProviderTurn(prepareParams) {
238
251
  }),
239
252
  };
240
253
  };
241
- let sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context);
254
+ let sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context, params.request.nativeSourceRoles);
242
255
  if (sessionAgentLease.created && sessionAgentLease.resumed && sendPlan.mode === "incremental") {
243
256
  sendPlan = { mode: "bootstrap", resetAgent: false, reason: "process_resume" };
244
257
  }
@@ -250,7 +263,7 @@ async function prepareCursorLocalProviderTurn(prepareParams) {
250
263
  sessionAgentScopeKey = sessionAgentLease.scopeKey;
251
264
  bridgeToolNames = new Set(sessionAgentLease.bridgeRun?.snapshot.tools.map((tool) => tool.mcpToolName) ?? []);
252
265
  includePiBridgeGuidance = bridgeToolNames.size > 0;
253
- sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context);
266
+ sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context, params.request.nativeSourceRoles);
254
267
  promptOptions = buildPromptOptions(sendPlan);
255
268
  prompt = buildCursorSessionSendPrompt(context, promptOptions, sendPlan);
256
269
  }
@@ -286,6 +299,7 @@ async function prepareCursorLocalProviderTurn(prepareParams) {
286
299
  activeToolNames: activeToolNames ? [...activeToolNames] : [],
287
300
  sessionAgentScopeKey,
288
301
  bridgeRunId: bridgeRun?.id,
302
+ ...(customSubagentNames ? { customSubagentNames } : {}),
289
303
  });
290
304
  const nativeReplayId = createCursorNativeReplayId();
291
305
  const textDeltas = [];
@@ -379,7 +393,9 @@ export async function prepareCursorProviderTurn(prepareParams) {
379
393
  return prepareCursorSummaryProviderTurn(prepareParams, selection);
380
394
  }
381
395
  const agentMode = getCursorProviderAgentModeOrThrow(params.scope.scopeKey);
382
- const context = { ...prepareParams, agentMode, selection, fastEnabled };
396
+ const agents = buildCursorCustomSubagentDefinitions(resolvedConfig.subagents.value);
397
+ const customSubagentNames = agents ? Object.keys(agents) : undefined;
398
+ const context = { ...prepareParams, agentMode, selection, fastEnabled, agents, customSubagentNames };
383
399
  return resolvedConfig.runtime.value === "cloud"
384
400
  ? prepareCursorCloudProviderTurn(context)
385
401
  : prepareCursorLocalProviderTurn(context);
@@ -33,7 +33,7 @@ export async function prepareCursorSummaryProviderTurn(prepareParams, selection)
33
33
  configureCursorSdkHttp1(sdk, resolvedConfig.local.useHttp1ForAgent);
34
34
  restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
35
35
  sessionStore = (await openCursorSessionStoreForScope({
36
- cwd, scopeKey: params.scope.scopeKey, persistent: false, hasResumeHandle: false,
36
+ cwd, scopeKey: params.scope.scopeKey, persistent: false,
37
37
  })).sessionStore;
38
38
  throwIfAborted();
39
39
  agent = await suppressCursorSdkOutput(() => sdk.Agent.create({
@@ -1,3 +1,4 @@
1
+ import { normalizeCursorToolName } from "./cursor-tool-presentation-registry.js";
1
2
  import { getToolArgs, getToolName } from "./cursor-transcript-utils.js";
2
3
  export class CursorToolCompletionLedger {
3
4
  startedToolCalls = new Map();
@@ -33,13 +34,14 @@ export class CursorToolCompletionLedger {
33
34
  return stepId;
34
35
  }
35
36
  const fingerprint = getStartedToolCallFingerprint(toolCall);
36
- for (const [callId, startedToolCall] of this.startedToolCalls) {
37
- if (getStartedToolCallFingerprint(startedToolCall) !== fingerprint)
38
- continue;
37
+ const matches = [...this.startedToolCalls].filter(([, started]) => getStartedToolCallFingerprint(started) === fingerprint);
38
+ // Identical concurrent shells cannot be joined safely without a matching ID.
39
+ if (normalizeCursorToolName(getToolName(toolCall)) === "shell" && matches.length !== 1)
40
+ return undefined;
41
+ const callId = matches[0]?.[0];
42
+ if (callId !== undefined)
39
43
  this.clearStartedToolCall(callId);
40
- return callId;
41
- }
42
- return undefined;
44
+ return callId;
43
45
  }
44
46
  recordCompletedIdentity(identity) {
45
47
  this.completedToolIdentities.add(identity);
@@ -95,5 +97,9 @@ export function getToolFingerprint(value) {
95
97
  }
96
98
  }
97
99
  export function getStartedToolCallFingerprint(toolCall) {
98
- return getToolFingerprint({ toolName: getToolName(toolCall), args: getToolArgs(toolCall) });
100
+ const name = getToolName(toolCall);
101
+ // Accept legacy shell aliases; this does not establish that the SDK emits alias-changing pairs.
102
+ // Keep exact argument matching; assistant text alone is not completion proof.
103
+ const toolName = normalizeCursorToolName(name) === "shell" ? "shell" : name;
104
+ return getToolFingerprint({ toolName, args: getToolArgs(toolCall) });
99
105
  }
@@ -7,6 +7,7 @@ import { sanitizeCursorProviderError } from "./cursor-provider-errors.js";
7
7
  import { resolveCursorApiKey } from "./cursor-api-key.js";
8
8
  import { CursorProviderTurnRunner } from "./cursor-provider-turn-runner.js";
9
9
  import { runExclusiveCursorSessionTurn, __testUtils as cursorSessionTurnQueueTestUtils } from "./cursor-session-turn-queue.js";
10
+ import { withCursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
10
11
  function makeInitialMessage(model) {
11
12
  return {
12
13
  role: "assistant",
@@ -49,7 +50,7 @@ export function streamCursor(model, context, options, ownership) {
49
50
  });
50
51
  try {
51
52
  stream.push({ type: "start", partial });
52
- await runExclusiveCursorSessionTurn(scope.scopeKey, () => runner.run(installCursorSdkProcessErrorGuard()), options?.signal);
53
+ await runExclusiveCursorSessionTurn(scope.scopeKey, () => withCursorSdkOutputNoticeHandler(ownership.reportSdkNotice, () => runner.run(installCursorSdkProcessErrorGuard())), options?.signal);
53
54
  }
54
55
  catch (error) {
55
56
  await runner.handleOuterCatch(error);
@@ -8,7 +8,7 @@ import { resolveCursorPiToolBridgeEnabled } from "./cursor-pi-tool-bridge-env.js
8
8
  export const CURSOR_ASK_QUESTION_TOOL_NAME = "cursor_ask_question";
9
9
  export const CURSOR_ASK_QUESTION_ENV = "PI_CURSOR_ASK_QUESTION";
10
10
  export function resolveCursorAskQuestionEnabled(env = process.env) {
11
- return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], true);
11
+ return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], false);
12
12
  }
13
13
  /** Package-namespaced event while `cursor_ask_question` awaits pi UI input. */
14
14
  export const CURSOR_ASK_QUESTION_BLOCKED_EVENT = "pi-cursor-sdk:ask-question:blocked";
@@ -146,13 +146,13 @@ export function registerCursorQuestionTool(pi) {
146
146
  pi.registerTool({
147
147
  name: CURSOR_ASK_QUESTION_TOOL_NAME,
148
148
  label: "Cursor question",
149
- description: "Ask the user a clarifying question from Cursor. Use when user preferences materially affect the next step; provide options when possible.",
150
- promptSnippet: "Ask the user a clarifying question through pi UI when material choices affect Cursor's next step",
149
+ description: "Ask the user a clarifying question through pi UI. Do not use this unless the user asked to be prompted; otherwise proceed with a stated assumption.",
150
+ promptSnippet: "Do not prompt the user through cursor_ask_question unless they asked to be asked",
151
151
  executionMode: "sequential",
152
152
  parameters: CursorAskQuestionParamsSchema,
153
153
  promptGuidelines: [
154
- "Use cursor_ask_question only when running a Cursor model and user input would materially change the plan, scope, platform, or implementation path.",
155
- "Prefer cursor_ask_question with 2-4 concrete options instead of guessing when Cursor plan mode needs user choices.",
154
+ "Do not call cursor_ask_question unless the user explicitly asked to be prompted or to choose among options.",
155
+ "If this tool is available, prefer a reasonable default and state the assumption instead of blocking on a questionnaire.",
156
156
  ],
157
157
  async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
158
158
  const questions = normalizeQuestions(params);
@@ -32,11 +32,22 @@ export function captureCursorRequestProjection(manager) {
32
32
  measurements.push(Object.freeze({ api: message.api, provider: message.provider, model: message.model, tokens }));
33
33
  }
34
34
  }
35
- return Object.freeze({ digest: projectionDigest(convertToLlm(projection.messages)), measurements: Object.freeze(measurements) });
35
+ const nativeSourceRoles = projection.messages.flatMap((message) => message.role === "system" ? [] : convertToLlm([message]).map(() => message.role));
36
+ return Object.freeze({
37
+ digest: projectionDigest(convertToLlm(projection.messages)),
38
+ measurements: Object.freeze(measurements),
39
+ nativeSourceRoles: Object.freeze(nativeSourceRoles),
40
+ });
36
41
  }
37
42
  export function resolveCursorRequestProvenance(snapshot, model, context, purpose) {
43
+ // ponytail: canonical native origin only. Unmatched transforms stay conservative;
44
+ // upgrade if Pi exposes final request-bound source provenance.
38
45
  if (purpose !== "normal" || snapshot.digest !== projectionDigest(context.messages))
39
46
  return Object.freeze({ purpose });
40
47
  const measurement = snapshot.measurements.findLast((item) => item.api === model.api && item.provider === model.provider && item.model === model.id && item.tokens <= model.contextWindow);
41
- return Object.freeze({ purpose, ...(measurement ? { occupancyFloor: measurement.tokens } : {}) });
48
+ return Object.freeze({
49
+ purpose,
50
+ nativeSourceRoles: snapshot.nativeSourceRoles,
51
+ ...(measurement ? { occupancyFloor: measurement.tokens } : {}),
52
+ });
42
53
  }
@@ -1 +1 @@
1
- export { CURSOR_SDK_STARTUP_NOISE_PATTERNS, installCursorSdkOutputFilter, isCursorSdkOutputSuppressed, isCursorSdkStartupNoise, suppressCursorSdkOutput, } from "../shared/cursor-sdk-output-filter.mjs";
1
+ export { CURSOR_SDK_STARTUP_NOISE_PATTERNS, withCursorSdkOutputNoticeHandler, installCursorSdkOutputFilter, isCursorSdkOutputSuppressed, isCursorSdkStartupNoise, suppressCursorSdkOutput, } from "../shared/cursor-sdk-output-filter.mjs";
@@ -19,7 +19,7 @@ function hasActiveAbortSuppression() {
19
19
  return false;
20
20
  }
21
21
  function isCursorProvenance(source) {
22
- return source === "cursor-sdk-stack" || source === "cursor-extension-connect-stack" || source === "cursor-backend-details";
22
+ return source === "cursor-sdk-stack" || source === "cursor-backend-details";
23
23
  }
24
24
  function isCursorSdkWriteIterableClosedError(error) {
25
25
  return (error instanceof Error &&
@@ -63,8 +63,6 @@ function shouldSuppressProcessError(event, args) {
63
63
  return hasActiveAbortSuppression();
64
64
  if (activeProviderTurns.size === 0)
65
65
  return false;
66
- if (classification.kind === "network")
67
- return isCursorProvenance(classification.source) || classification.source === "connect-node-stack";
68
66
  return isCursorProvenance(classification.source);
69
67
  }
70
68
  function installProcessEmitPatch() {