pi-cursor-sdk 0.4.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 (799) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +169 -37
  3. package/dist/context-window-cache.js +0 -6
  4. package/dist/context.js +61 -34
  5. package/dist/cursor-api-key.js +34 -19
  6. package/dist/cursor-cloud-lifecycle.js +122 -98
  7. package/dist/cursor-cloud-options.js +1 -0
  8. package/dist/cursor-config.js +59 -0
  9. package/dist/cursor-custom-store-path.js +177 -0
  10. package/dist/cursor-custom-subagent-definitions.js +14 -0
  11. package/dist/cursor-durable-fs.js +97 -3
  12. package/dist/cursor-fallback-models.generated.js +288 -1
  13. package/dist/cursor-fallback-warning.js +10 -4
  14. package/dist/cursor-http1.js +8 -8
  15. package/dist/cursor-live-run-coordinator.js +31 -15
  16. package/dist/cursor-mcp-timeout-override.js +3 -1
  17. package/dist/cursor-native-replay-routing.js +1 -1
  18. package/dist/cursor-native-tool-display-registration.js +46 -22
  19. package/dist/cursor-native-tool-display-state.js +57 -22
  20. package/dist/cursor-native-tool-display-tools.js +5 -6
  21. package/dist/cursor-pi-tool-bridge-constants.js +23 -2
  22. package/dist/cursor-pi-tool-bridge-run.js +28 -3
  23. package/dist/cursor-pi-tool-bridge-server.js +1 -1
  24. package/dist/cursor-pi-tool-bridge-snapshot.js +1 -1
  25. package/dist/cursor-pi-tool-bridge.js +31 -9
  26. package/dist/cursor-provider-binding.js +118 -0
  27. package/dist/cursor-provider-errors.js +61 -33
  28. package/dist/cursor-provider-lazy.js +23 -11
  29. package/dist/cursor-provider-live-run-drain.js +25 -16
  30. package/dist/cursor-provider-run-finalizer.js +21 -9
  31. package/dist/cursor-provider-turn-coordinator.js +1 -0
  32. package/dist/cursor-provider-turn-display-router.js +4 -0
  33. package/dist/cursor-provider-turn-emit.js +1 -0
  34. package/dist/cursor-provider-turn-finalize.js +29 -20
  35. package/dist/cursor-provider-turn-prepare.js +49 -20
  36. package/dist/cursor-provider-turn-runner.js +37 -11
  37. package/dist/cursor-provider-turn-send.js +22 -9
  38. package/dist/cursor-provider-turn-summary.js +89 -0
  39. package/dist/cursor-provider-turn-tool-ledger.js +13 -7
  40. package/dist/cursor-provider.js +10 -3
  41. package/dist/cursor-question-tool.js +5 -5
  42. package/dist/cursor-request-provenance.js +53 -0
  43. package/dist/cursor-ripgrep-path.js +14 -3
  44. package/dist/cursor-runtime-state.js +50 -43
  45. package/dist/cursor-sdk-billed-usage.js +54 -75
  46. package/dist/cursor-sdk-event-debug-session.js +5 -6
  47. package/dist/cursor-sdk-event-debug.js +9 -6
  48. package/dist/cursor-sdk-output-filter.js +1 -1
  49. package/dist/cursor-sdk-process-error-guard.js +9 -10
  50. package/dist/cursor-sdk-runtime.js +13 -1
  51. package/dist/cursor-sdk-vendor-env.js +20 -0
  52. package/dist/cursor-session-agent-cleanup.js +31 -28
  53. package/dist/cursor-session-agent-lifecycle.js +18 -9
  54. package/dist/cursor-session-agent-lineage.js +28 -12
  55. package/dist/cursor-session-agent-resume.js +51 -35
  56. package/dist/cursor-session-agent.js +47 -25
  57. package/dist/cursor-session-compaction-prep.js +2 -7
  58. package/dist/cursor-session-scope.js +71 -39
  59. package/dist/cursor-session-send-policy.js +2 -2
  60. package/dist/cursor-session-settings.js +61 -0
  61. package/dist/cursor-session-store.js +235 -45
  62. package/dist/cursor-skill-tool.js +32 -49
  63. package/dist/cursor-state.js +78 -65
  64. package/dist/cursor-tool-manifest.js +1 -1
  65. package/dist/cursor-usage-accounting.js +13 -70
  66. package/dist/cursor-usage-command.js +89 -0
  67. package/dist/cursor-usage-ledger.js +512 -0
  68. package/dist/index.js +29 -35
  69. package/dist/model-discovery.js +62 -37
  70. package/dist/model-list-cache.js +12 -1
  71. package/docs/cursor-dogfood-checklist.md +3 -3
  72. package/docs/cursor-live-smoke-checklist.md +15 -15
  73. package/docs/cursor-model-ux-spec.md +124 -39
  74. package/docs/cursor-native-tool-replay.md +18 -8
  75. package/docs/cursor-native-tool-visual-audit.md +8 -8
  76. package/docs/cursor-testing-lessons.md +87 -25
  77. package/docs/cursor-tool-surfaces.md +4 -4
  78. package/docs/platform-smoke-implementation.md +10 -6
  79. package/docs/platform-smoke.md +35 -46
  80. package/node_modules/@hono/node-server/README.md +21 -10
  81. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  82. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  83. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  84. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  85. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  86. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  87. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  88. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  89. package/node_modules/@hono/node-server/package.json +3 -2
  90. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
  91. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
  92. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
  93. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
  94. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
  95. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
  96. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
  97. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
  98. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
  99. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
  100. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
  101. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
  102. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
  103. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
  104. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
  105. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
  106. package/node_modules/@modelcontextprotocol/core/package.json +2 -2
  107. package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
  108. package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
  109. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
  110. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
  111. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
  112. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
  113. package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
  114. package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
  115. package/node_modules/@modelcontextprotocol/server/README.md +1 -7
  116. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
  117. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
  118. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
  119. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
  120. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
  121. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
  122. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
  123. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
  124. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
  125. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
  126. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
  127. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
  128. package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
  129. package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
  130. package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
  131. package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
  132. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
  133. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
  134. package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
  135. package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
  136. package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
  137. package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
  138. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
  139. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
  140. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
  141. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
  142. package/node_modules/@modelcontextprotocol/server/package.json +4 -4
  143. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  144. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  145. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  146. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  147. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  148. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  149. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  150. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  151. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  152. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  153. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  154. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  155. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  156. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  157. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  158. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  159. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  160. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  161. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  162. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  163. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  164. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  165. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  166. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  167. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  168. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  169. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  170. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  171. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  172. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  173. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  174. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  175. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  176. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  177. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  178. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  179. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  180. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  181. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  182. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  183. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  184. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  185. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  186. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  187. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  188. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  189. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  190. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  191. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  192. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  193. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  194. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  195. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  196. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  197. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  198. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  199. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  200. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  201. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  202. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  203. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  204. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  205. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  206. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  207. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  208. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  209. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  210. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  211. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  212. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  213. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  214. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  215. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  216. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  217. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  218. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  219. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  220. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  221. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  222. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  223. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  224. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  225. package/node_modules/hono/dist/cjs/compose.js +49 -66
  226. package/node_modules/hono/dist/cjs/context.js +379 -450
  227. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  228. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  229. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  230. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  231. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  232. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  233. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  234. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  235. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  236. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  237. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  238. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  239. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  240. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  241. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  242. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  243. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  244. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  245. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  246. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  247. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  248. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  249. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  250. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  251. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  252. package/node_modules/hono/dist/cjs/hono-base.js +347 -403
  253. package/node_modules/hono/dist/cjs/hono.js +28 -42
  254. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  255. package/node_modules/hono/dist/cjs/index.js +22 -30
  256. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  257. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  258. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  259. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  260. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  261. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  262. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  263. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  264. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  265. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  266. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  267. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  268. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  269. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  270. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  271. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  272. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  273. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  274. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  275. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  276. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  277. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  278. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  279. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  280. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  281. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  282. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  283. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  284. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  285. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  286. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  287. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  288. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  289. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  290. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  291. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  292. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  293. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  294. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  295. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  296. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  297. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  298. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  299. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  300. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  301. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  302. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  303. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  304. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  305. package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
  306. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  307. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  308. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  309. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  310. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  311. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  312. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  313. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  314. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  315. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  316. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  317. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  318. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  319. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  320. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  321. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  322. package/node_modules/hono/dist/cjs/request.js +334 -346
  323. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  324. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  325. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  326. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  327. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  328. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  329. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  330. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  331. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  332. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  333. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  334. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  335. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  336. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  337. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  338. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  339. package/node_modules/hono/dist/cjs/router.js +37 -37
  340. package/node_modules/hono/dist/cjs/types.js +5 -28
  341. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  342. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  343. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  344. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  345. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  346. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  347. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  348. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  349. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  350. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  351. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  352. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  353. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  354. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  355. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  356. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  357. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  358. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  359. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  360. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  361. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  362. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  363. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  364. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  365. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  366. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  367. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  368. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  369. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  370. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  371. package/node_modules/hono/dist/client/client.js +138 -197
  372. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  373. package/node_modules/hono/dist/client/index.js +3 -7
  374. package/node_modules/hono/dist/client/types.js +1 -0
  375. package/node_modules/hono/dist/client/utils.js +51 -68
  376. package/node_modules/hono/dist/compose.js +49 -45
  377. package/node_modules/hono/dist/context.js +376 -426
  378. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  379. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  380. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  381. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  382. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  383. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  384. package/node_modules/hono/dist/helper/css/common.js +167 -225
  385. package/node_modules/hono/dist/helper/css/index.js +132 -137
  386. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  387. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  388. package/node_modules/hono/dist/helper/html/index.js +30 -39
  389. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  390. package/node_modules/hono/dist/helper/route/index.js +121 -43
  391. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  392. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  393. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  394. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  395. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  396. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  397. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  398. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  399. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  400. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  401. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  402. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  403. package/node_modules/hono/dist/hono-base.js +344 -379
  404. package/node_modules/hono/dist/hono.js +27 -20
  405. package/node_modules/hono/dist/http-exception.js +53 -33
  406. package/node_modules/hono/dist/index.js +19 -6
  407. package/node_modules/hono/dist/jsx/base.js +231 -340
  408. package/node_modules/hono/dist/jsx/children.js +16 -20
  409. package/node_modules/hono/dist/jsx/components.js +118 -170
  410. package/node_modules/hono/dist/jsx/constants.js +9 -15
  411. package/node_modules/hono/dist/jsx/context.js +153 -150
  412. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  413. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  414. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  415. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  416. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  417. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  418. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  419. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  420. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  421. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  422. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  423. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  424. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  425. package/node_modules/hono/dist/jsx/index.js +45 -98
  426. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  427. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  428. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  429. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  430. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  431. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  432. package/node_modules/hono/dist/jsx/types.js +1 -0
  433. package/node_modules/hono/dist/jsx/utils.js +105 -168
  434. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  435. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  436. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  437. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  438. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  439. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  440. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  441. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  442. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  443. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  444. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  445. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  446. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  447. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  448. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  449. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  450. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  451. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  452. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  453. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  454. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  455. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  456. package/node_modules/hono/dist/middleware/mount/index.js +70 -0
  457. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  458. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  459. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  460. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  461. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  462. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  463. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  464. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  465. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  466. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  467. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  468. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  469. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  470. package/node_modules/hono/dist/preset/quick.js +17 -15
  471. package/node_modules/hono/dist/preset/tiny.js +14 -11
  472. package/node_modules/hono/dist/request/constants.js +4 -5
  473. package/node_modules/hono/dist/request.js +328 -319
  474. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  475. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  476. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  477. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  478. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  479. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  480. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  481. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  482. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  483. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  484. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  485. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  486. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  487. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  488. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  489. package/node_modules/hono/dist/router/utils.js +4 -5
  490. package/node_modules/hono/dist/router.js +35 -14
  491. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  492. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  493. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  494. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  495. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  496. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  497. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  498. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  499. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  500. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  501. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  502. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  503. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  504. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  505. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  506. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  507. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  508. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  509. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  510. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  511. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  512. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  513. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  514. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  515. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  516. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  517. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  518. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  519. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  520. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  521. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  522. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  523. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  524. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  525. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  526. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  527. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  528. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  529. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  530. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  531. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  532. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  533. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  534. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  535. package/node_modules/hono/dist/types/context.d.ts +335 -335
  536. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  537. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  538. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  539. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  540. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  541. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  542. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  543. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  544. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  545. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  546. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  547. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  548. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  549. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  550. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  551. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  552. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  553. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  554. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  555. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  556. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  557. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  558. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  559. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  560. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  561. package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
  562. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  563. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  564. package/node_modules/hono/dist/types/index.d.ts +6 -37
  565. package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
  566. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  567. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  568. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  569. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  570. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  571. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  572. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  573. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  574. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  575. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  576. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  577. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  578. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  579. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  580. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  581. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  582. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  583. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  584. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  585. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  586. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  587. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  588. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  589. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  590. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  591. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  592. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  593. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  594. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  595. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  596. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  597. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  598. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  599. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  600. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  601. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  602. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  603. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  604. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  605. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  606. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  607. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  608. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  609. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  610. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  611. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  612. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  613. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  614. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
  615. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  616. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  617. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  618. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  619. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  620. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  621. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  622. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  623. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  624. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  625. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  626. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  627. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  628. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  629. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  630. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  631. package/node_modules/hono/dist/types/request.d.ts +288 -286
  632. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  633. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  634. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  635. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  636. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  637. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  638. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  639. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  640. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  641. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  642. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  643. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  644. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  645. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  646. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  647. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  648. package/node_modules/hono/dist/types/router.d.ts +23 -22
  649. package/node_modules/hono/dist/types/types.d.ts +146 -505
  650. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  651. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  652. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  653. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  654. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  655. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  656. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  657. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  658. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  659. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  660. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  661. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  662. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  663. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  664. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  665. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  666. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  667. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  668. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  669. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  670. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  671. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  672. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  673. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  674. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  675. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  676. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  677. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  678. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  679. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  680. package/node_modules/hono/dist/types.js +4 -6
  681. package/node_modules/hono/dist/utils/accept.js +185 -212
  682. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  683. package/node_modules/hono/dist/utils/body.js +87 -92
  684. package/node_modules/hono/dist/utils/buffer.js +44 -71
  685. package/node_modules/hono/dist/utils/color.js +33 -21
  686. package/node_modules/hono/dist/utils/compress.js +11 -5
  687. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  688. package/node_modules/hono/dist/utils/constants.js +7 -5
  689. package/node_modules/hono/dist/utils/cookie.js +114 -163
  690. package/node_modules/hono/dist/utils/crypto.js +30 -40
  691. package/node_modules/hono/dist/utils/encode.js +30 -26
  692. package/node_modules/hono/dist/utils/filepath.js +23 -33
  693. package/node_modules/hono/dist/utils/handler.js +10 -11
  694. package/node_modules/hono/dist/utils/headers.js +1 -0
  695. package/node_modules/hono/dist/utils/html.js +97 -117
  696. package/node_modules/hono/dist/utils/http-status.js +1 -0
  697. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  698. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  699. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  700. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  701. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  702. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  703. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  704. package/node_modules/hono/dist/utils/mime.js +74 -79
  705. package/node_modules/hono/dist/utils/stream.js +86 -88
  706. package/node_modules/hono/dist/utils/types.js +1 -0
  707. package/node_modules/hono/dist/utils/url.js +187 -215
  708. package/node_modules/hono/dist/validator/index.js +1 -4
  709. package/node_modules/hono/dist/validator/utils.js +1 -0
  710. package/node_modules/hono/dist/validator/validator.js +61 -83
  711. package/node_modules/hono/package.json +35 -27
  712. package/package.json +16 -14
  713. package/scripts/cloud-runtime-smoke.mjs +4 -2
  714. package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
  715. package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
  716. package/scripts/local-resume-smoke.mjs +1 -1
  717. package/scripts/platform-smoke/artifacts.mjs +7 -1
  718. package/scripts/platform-smoke/card-detect.mjs +2 -8
  719. package/scripts/platform-smoke/targets.mjs +8 -15
  720. package/scripts/platform-smoke/visual-evidence.mjs +7 -2
  721. package/scripts/tmux-live-smoke.sh +57 -90
  722. package/shared/cursor-sdk-output-filter.d.mts +3 -0
  723. package/shared/cursor-sdk-output-filter.mjs +117 -44
  724. package/src/context-window-cache.ts +0 -6
  725. package/src/context.ts +65 -33
  726. package/src/cursor-api-key.ts +37 -17
  727. package/src/cursor-cloud-lifecycle.ts +124 -98
  728. package/src/cursor-cloud-options.ts +2 -0
  729. package/src/cursor-config.ts +76 -0
  730. package/src/cursor-custom-store-path.ts +151 -0
  731. package/src/cursor-custom-subagent-definitions.ts +21 -0
  732. package/src/cursor-durable-fs.ts +65 -3
  733. package/src/cursor-fallback-models.generated.ts +288 -1
  734. package/src/cursor-fallback-warning.ts +9 -5
  735. package/src/cursor-http1.ts +8 -8
  736. package/src/cursor-live-run-coordinator.ts +33 -15
  737. package/src/cursor-mcp-timeout-override.ts +3 -1
  738. package/src/cursor-native-replay-routing.ts +2 -1
  739. package/src/cursor-native-tool-display-registration.ts +48 -24
  740. package/src/cursor-native-tool-display-state.ts +65 -21
  741. package/src/cursor-native-tool-display-tools.ts +7 -4
  742. package/src/cursor-pi-tool-bridge-constants.ts +27 -2
  743. package/src/cursor-pi-tool-bridge-run.ts +32 -3
  744. package/src/cursor-pi-tool-bridge-server.ts +1 -2
  745. package/src/cursor-pi-tool-bridge-snapshot.ts +1 -1
  746. package/src/cursor-pi-tool-bridge-types.ts +3 -0
  747. package/src/cursor-pi-tool-bridge.ts +26 -9
  748. package/src/cursor-provider-binding.ts +121 -0
  749. package/src/cursor-provider-errors.ts +59 -35
  750. package/src/cursor-provider-lazy.ts +21 -15
  751. package/src/cursor-provider-live-run-drain.ts +29 -17
  752. package/src/cursor-provider-run-finalizer.ts +26 -16
  753. package/src/cursor-provider-turn-coordinator.ts +2 -0
  754. package/src/cursor-provider-turn-display-router.ts +5 -0
  755. package/src/cursor-provider-turn-emit.ts +3 -1
  756. package/src/cursor-provider-turn-finalize.ts +38 -23
  757. package/src/cursor-provider-turn-prepare.ts +51 -27
  758. package/src/cursor-provider-turn-runner.ts +40 -13
  759. package/src/cursor-provider-turn-send.ts +23 -15
  760. package/src/cursor-provider-turn-summary.ts +94 -0
  761. package/src/cursor-provider-turn-tool-ledger.ts +12 -7
  762. package/src/cursor-provider-turn-types.ts +37 -4
  763. package/src/cursor-provider.ts +28 -4
  764. package/src/cursor-question-tool.ts +5 -5
  765. package/src/cursor-request-provenance.ts +79 -0
  766. package/src/cursor-ripgrep-path.ts +15 -5
  767. package/src/cursor-runtime-state.ts +53 -48
  768. package/src/cursor-sdk-billed-usage.ts +54 -102
  769. package/src/cursor-sdk-event-debug-session.ts +5 -5
  770. package/src/cursor-sdk-event-debug.ts +10 -6
  771. package/src/cursor-sdk-output-filter.ts +2 -0
  772. package/src/cursor-sdk-process-error-guard.ts +8 -9
  773. package/src/cursor-sdk-runtime.ts +15 -2
  774. package/src/cursor-sdk-vendor-env.ts +22 -0
  775. package/src/cursor-session-agent-cleanup.ts +30 -29
  776. package/src/cursor-session-agent-lifecycle.ts +14 -9
  777. package/src/cursor-session-agent-lineage.ts +26 -12
  778. package/src/cursor-session-agent-resume.ts +49 -36
  779. package/src/cursor-session-agent.ts +57 -27
  780. package/src/cursor-session-compaction-prep.ts +2 -7
  781. package/src/cursor-session-scope.ts +87 -39
  782. package/src/cursor-session-send-policy.ts +2 -2
  783. package/src/cursor-session-settings.ts +72 -0
  784. package/src/cursor-session-store.ts +259 -53
  785. package/src/cursor-skill-tool.ts +37 -61
  786. package/src/cursor-state.ts +81 -69
  787. package/src/cursor-tool-manifest.ts +1 -1
  788. package/src/cursor-usage-accounting.ts +17 -82
  789. package/src/cursor-usage-command.ts +76 -0
  790. package/src/cursor-usage-ledger.ts +500 -0
  791. package/src/index.ts +30 -39
  792. package/src/model-discovery.ts +76 -45
  793. package/src/model-list-cache.ts +11 -1
  794. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
  795. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
  796. package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
  797. package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
  798. package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
  799. package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
@@ -153,6 +153,7 @@ export function createCursorLiveRunCoordinator(deps) {
153
153
  bridgeRun: params.bridgeRun,
154
154
  sessionBridgeRun: params.sessionBridgeRun,
155
155
  sessionAgentScopeKey,
156
+ nativeDisplay: params.nativeDisplay,
156
157
  accounting: createCursorLiveRunAccountingState(params.promptInputTokens),
157
158
  pendingEvents: [],
158
159
  textDeltas: params.textDeltas ?? [],
@@ -170,6 +171,11 @@ export function createCursorLiveRunCoordinator(deps) {
170
171
  leased: false,
171
172
  leaseQueue: [],
172
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
+ })] : []);
173
179
  pendingRuns.set(run.id, run);
174
180
  pendingRunIdsByScopeKey.set(sessionAgentScopeKey, run.id);
175
181
  return run;
@@ -270,7 +276,10 @@ export function createCursorLiveRunCoordinator(deps) {
270
276
  run.accounting = taken.state;
271
277
  return taken.sdkTurnUsage;
272
278
  },
273
- getPendingFromContext(context, getReplayId) {
279
+ getPendingFromContext(context, getReplayId, scopeKey) {
280
+ const run = getUndisposed(pendingRunIdsByScopeKey.get(scopeKey));
281
+ if (!run)
282
+ return undefined;
274
283
  const messages = getCursorConversationMessages(context);
275
284
  let index = messages.length - 1;
276
285
  while (index >= 0 && messages[index]?.role === "user") {
@@ -280,18 +289,8 @@ export function createCursorLiveRunCoordinator(deps) {
280
289
  const message = messages[index];
281
290
  if (message.role !== "toolResult")
282
291
  break;
283
- const replayId = getReplayId(message.toolCallId);
284
- if (replayId) {
285
- const replayRun = getUndisposed(replayId);
286
- if (replayRun)
287
- return replayRun;
288
- }
289
- for (const run of pendingRuns.values()) {
290
- if (run.disposed)
291
- continue;
292
- if (run.bridgeRun?.hasPendingPiToolCallId(message.toolCallId))
293
- return run;
294
- }
292
+ if (matchesCursorLiveRunToolResult(run, message, getReplayId))
293
+ return run;
295
294
  }
296
295
  return undefined;
297
296
  },
@@ -349,10 +348,16 @@ export function createCursorLiveRunCoordinator(deps) {
349
348
  const state = getPrivateState(run);
350
349
  clearIdleDisposeTimer(run);
351
350
  state.idleDisposeRequested = true;
352
- if (state.leased || state.leaseQueue.length > 0)
351
+ if (state.leased || state.leaseQueue.length > 0 ||
352
+ [run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls()))
353
353
  return;
354
- state.idleDisposeRequested = false;
355
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
+ }
356
361
  void coordinator.release(run).catch(() => {
357
362
  // Idle dispose must not leave release failures as unhandled rejections.
358
363
  });
@@ -368,6 +373,15 @@ export function createCursorLiveRunCoordinator(deps) {
368
373
  return;
369
374
  const abandoned = !isSuccessfulCursorLiveRun(run);
370
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 = [];
371
385
  unregister(run);
372
386
  clearIdleDisposeTimer(run);
373
387
  state.idleDisposeRequested = false;
@@ -389,12 +403,14 @@ export function createCursorLiveRunCoordinator(deps) {
389
403
  }
390
404
  if (abandoned) {
391
405
  if (!run.done) {
406
+ const usageCompletion = run.onAbandon?.();
392
407
  try {
393
408
  await cancelCursorLiveSdkRun(run);
394
409
  }
395
410
  catch {
396
411
  // cancellation failure should not block session-agent abandonment
397
412
  }
413
+ await usageCompletion;
398
414
  }
399
415
  await deps.abandonSessionAgent(run.sessionAgentScopeKey);
400
416
  }
@@ -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;
@@ -8,7 +8,7 @@ export function isNativeToolActiveInContext(toolName, activeToolNames) {
8
8
  * Extension resync (pi active tools) is separate; this uses context.tools snapshot only.
9
9
  */
10
10
  export function resolveNativeReplayDisposition(input) {
11
- if (!input.useNativeToolReplay || !canRenderCursorToolNatively(input.toolName)) {
11
+ if (!input.useNativeToolReplay || !(input.registeredToolNames?.has(input.toolName) ?? canRenderCursorToolNatively(input.toolName))) {
12
12
  return "transcript_trace";
13
13
  }
14
14
  if (isNativeToolActiveInContext(input.toolName, input.activeToolNames) && input.hasLiveRun) {
@@ -2,7 +2,7 @@ import { arePiToolsDisabled } from "./cursor-active-tools.js";
2
2
  import { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, isNativeCursorToolName, NATIVE_CURSOR_TOOL_NAMES, } from "./cursor-native-tool-names.js";
3
3
  import { isCursorModel } from "./cursor-model.js";
4
4
  import { registerCursorModelLifecycle } from "./cursor-model-lifecycle.js";
5
- import { isCursorNativeToolDisplayRequested, isCursorNativeToolRegistrationRequested, NATIVE_CURSOR_TOOL_DISPLAY_ENV, readBooleanEnv, registeredNativeToolNames, setCursorNativeToolDisplayRuntimeRequested, skippedNativeToolNames, } from "./cursor-native-tool-display-state.js";
5
+ import { isCursorNativeToolDisplayRequested, isCursorNativeToolRegistrationRequested, NATIVE_CURSOR_TOOL_DISPLAY_ENV, readBooleanEnv, getCursorNativeToolDisplayState, registerCursorNativeToolDisplayState, setCursorNativeToolDisplayRuntimeRequested, } from "./cursor-native-tool-display-state.js";
6
6
  import { isCursorReplayToolName } from "./cursor-tool-presentation-registry.js";
7
7
  import { registerNativeCursorTool } from "./cursor-native-tool-display-tools.js";
8
8
  export const CURSOR_CORE_PI_REPLAY_TOOL_NAMES = ["read", "bash", "edit", "write"];
@@ -10,22 +10,37 @@ const CORE_PI_TOOL_NAMES = new Set(CURSOR_CORE_PI_REPLAY_TOOL_NAMES);
10
10
  function isCursorCorePiReplayToolName(toolName) {
11
11
  return CORE_PI_TOOL_NAMES.has(toolName);
12
12
  }
13
+ // Pi filters getAllTools even after registration; new/reloaded extensions receive a new API.
14
+ const filteredRegistrations = new WeakMap();
13
15
  function hasNonBuiltinTool(pi, toolName) {
14
16
  const existingTool = pi.getAllTools().find((tool) => tool.name === toolName);
15
17
  return existingTool !== undefined && existingTool.sourceInfo.source !== "builtin";
16
18
  }
17
- function registerNativeCursorToolsFromSet(pi, toolNames) {
19
+ function registerNativeCursorToolsFromSet(pi, toolNames, getCwd) {
20
+ const state = getCursorNativeToolDisplayState(pi);
21
+ const { registeredNativeToolSources, skippedNativeToolNames } = state;
22
+ let filteredToolNames = filteredRegistrations.get(pi);
23
+ if (!filteredToolNames) {
24
+ filteredToolNames = new Set();
25
+ filteredRegistrations.set(pi, filteredToolNames);
26
+ }
18
27
  const newlySkippedToolNames = [];
19
28
  for (const toolName of toolNames) {
20
- if (registeredNativeToolNames.has(toolName) || skippedNativeToolNames.has(toolName))
29
+ if (registeredNativeToolSources.has(toolName) || filteredToolNames.has(toolName))
21
30
  continue;
22
31
  if (hasNonBuiltinTool(pi, toolName)) {
23
- skippedNativeToolNames.add(toolName);
24
- newlySkippedToolNames.push(toolName);
32
+ if (!skippedNativeToolNames.has(toolName)) {
33
+ skippedNativeToolNames.add(toolName);
34
+ newlySkippedToolNames.push(toolName);
35
+ }
25
36
  continue;
26
37
  }
27
- registerNativeCursorTool(pi, toolName);
28
- registeredNativeToolNames.add(toolName);
38
+ registerNativeCursorTool(pi, toolName, getCwd, state);
39
+ const registeredTool = pi.getAllTools().find((tool) => tool.name === toolName);
40
+ if (registeredTool)
41
+ registeredNativeToolSources.set(toolName, registeredTool.sourceInfo);
42
+ else
43
+ filteredToolNames.add(toolName);
29
44
  }
30
45
  return newlySkippedToolNames;
31
46
  }
@@ -34,15 +49,13 @@ function notifySkippedNativeCursorToolsIfNeeded(ctx, skippedToolNames) {
34
49
  return;
35
50
  ctx.ui.notify(`Cursor native tool replay skipped for ${skippedToolNames.join(", ")} because another extension already provides ${skippedToolNames.length === 1 ? "that tool" : "those tools"}. Cursor will use scrubbed activity transcripts for skipped tools.`, "warning");
36
51
  }
37
- function hasAttemptedNativeCursorToolRegistration() {
38
- return registeredNativeToolNames.size > 0 || skippedNativeToolNames.size > 0;
39
- }
40
52
  function removeRegisteredNonCoreNativeCursorTools(pi) {
41
- if (registeredNativeToolNames.size === 0)
53
+ const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
54
+ if (registeredNativeToolSources.size === 0)
42
55
  return;
43
56
  const activeToolNames = new Set(pi.getActiveTools());
44
57
  let changed = false;
45
- for (const toolName of registeredNativeToolNames) {
58
+ for (const toolName of registeredNativeToolSources.keys()) {
46
59
  if (isCursorCorePiReplayToolName(toolName))
47
60
  continue;
48
61
  if (!activeToolNames.delete(toolName))
@@ -53,7 +66,8 @@ function removeRegisteredNonCoreNativeCursorTools(pi) {
53
66
  pi.setActiveTools([...activeToolNames]);
54
67
  }
55
68
  export function syncRegisteredNativeCursorToolsForModel(pi, model) {
56
- if (registeredNativeToolNames.size === 0)
69
+ const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
70
+ if (registeredNativeToolSources.size === 0)
57
71
  return;
58
72
  if (!isCursorModel(model)) {
59
73
  removeRegisteredNonCoreNativeCursorTools(pi);
@@ -63,7 +77,7 @@ export function syncRegisteredNativeCursorToolsForModel(pi, model) {
63
77
  return;
64
78
  const activeToolNames = new Set(pi.getActiveTools());
65
79
  let changed = false;
66
- for (const toolName of registeredNativeToolNames) {
80
+ for (const toolName of registeredNativeToolSources.keys()) {
67
81
  if (isCursorReplayToolName(toolName) && !CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES.some((activeReplayToolName) => activeReplayToolName === toolName))
68
82
  continue;
69
83
  if (activeToolNames.has(toolName))
@@ -74,29 +88,39 @@ export function syncRegisteredNativeCursorToolsForModel(pi, model) {
74
88
  if (changed)
75
89
  pi.setActiveTools([...activeToolNames]);
76
90
  }
77
- function ensureNativeCursorToolsRegisteredForModel(pi, ctx) {
78
- if (!isCursorModel(ctx.model) || hasAttemptedNativeCursorToolRegistration())
91
+ function ensureNativeCursorToolsRegisteredForModel(pi, ctx, getCwd) {
92
+ if (!isCursorModel(ctx.model))
79
93
  return;
80
94
  const nonCoreToolNames = NATIVE_CURSOR_TOOL_NAMES.filter((toolName) => !isCursorCorePiReplayToolName(toolName));
81
95
  const skippedToolNames = [
82
- ...registerNativeCursorToolsFromSet(pi, nonCoreToolNames),
83
- ...registerNativeCursorToolsFromSet(pi, CURSOR_CORE_PI_REPLAY_TOOL_NAMES),
96
+ ...registerNativeCursorToolsFromSet(pi, nonCoreToolNames, getCwd),
97
+ ...registerNativeCursorToolsFromSet(pi, CURSOR_CORE_PI_REPLAY_TOOL_NAMES, getCwd),
84
98
  ];
85
99
  notifySkippedNativeCursorToolsIfNeeded(ctx, skippedToolNames);
86
100
  }
87
- function ensureThenSyncNativeCursorToolsForModel(pi, ctx) {
101
+ function ensureThenSyncNativeCursorToolsForModel(pi, ctx, getCwd) {
102
+ const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
103
+ const currentTools = pi.getAllTools();
104
+ for (const [toolName, sourceInfo] of registeredNativeToolSources) {
105
+ if (!currentTools.some((tool) => tool.name === toolName && tool.sourceInfo === sourceInfo)) {
106
+ registeredNativeToolSources.delete(toolName);
107
+ }
108
+ }
88
109
  const requested = isCursorNativeToolRegistrationRequested(ctx.mode);
89
- setCursorNativeToolDisplayRuntimeRequested(requested);
110
+ setCursorNativeToolDisplayRuntimeRequested(requested, pi);
90
111
  if (!requested) {
91
112
  removeRegisteredNonCoreNativeCursorTools(pi);
92
113
  return;
93
114
  }
94
- ensureNativeCursorToolsRegisteredForModel(pi, ctx);
115
+ ensureNativeCursorToolsRegisteredForModel(pi, ctx, getCwd);
95
116
  syncRegisteredNativeCursorToolsForModel(pi, ctx.model);
96
117
  }
97
118
  export function registerCursorNativeToolDisplay(pi) {
119
+ registerCursorNativeToolDisplayState(pi);
120
+ let cwd = process.cwd();
98
121
  registerCursorModelLifecycle(pi, (ctx) => {
99
- ensureThenSyncNativeCursorToolsForModel(pi, ctx);
122
+ cwd = ctx.cwd;
123
+ ensureThenSyncNativeCursorToolsForModel(pi, ctx, () => cwd);
100
124
  });
101
125
  }
102
126
  export { isNativeCursorToolName, isCursorNativeToolDisplayRequested };
@@ -1,10 +1,36 @@
1
1
  import { parseOptionalEnvBoolean } from "./cursor-env-boolean.js";
2
+ import { normalizeCursorToolName } from "./cursor-tool-presentation-registry.js";
2
3
  export const NATIVE_CURSOR_TOOL_DISPLAY_ENV = "PI_CURSOR_NATIVE_TOOL_DISPLAY";
3
4
  export const NATIVE_CURSOR_TOOL_REGISTRATION_ENV = "PI_CURSOR_REGISTER_NATIVE_TOOLS";
4
- export const registeredNativeToolNames = new Set();
5
- export const skippedNativeToolNames = new Set();
5
+ function createDisplayState() {
6
+ return { registeredNativeToolSources: new Map(), skippedNativeToolNames: new Set(), runtimeRequested: false, resultIds: new Set() };
7
+ }
8
+ let lastDisplayState = createDisplayState();
9
+ const displayStates = new Map();
10
+ // IDs index results; the owning display state and tool authorize consumption.
6
11
  export const nativeToolResults = new Map();
7
- let nativeToolDisplayRuntimeRequested = false;
12
+ const resultStates = new Map();
13
+ export function getCursorNativeToolDisplayState(pi) {
14
+ if (!pi)
15
+ return lastDisplayState;
16
+ const state = displayStates.get(pi);
17
+ if (!state)
18
+ throw new Error("Cursor native display binding is no longer active.");
19
+ return state;
20
+ }
21
+ export function registerCursorNativeToolDisplayState(pi) {
22
+ const state = createDisplayState();
23
+ displayStates.set(pi, state);
24
+ lastDisplayState = state;
25
+ pi.on("session_shutdown", () => {
26
+ displayStates.delete(pi);
27
+ for (const id of state.resultIds) {
28
+ nativeToolResults.delete(id);
29
+ resultStates.delete(id);
30
+ }
31
+ state.resultIds.clear();
32
+ });
33
+ }
8
34
  export function readBooleanEnv(name, env = process.env) {
9
35
  return parseOptionalEnvBoolean(env[name]);
10
36
  }
@@ -19,34 +45,42 @@ export function isCursorNativeToolDisplayRequested(mode) {
19
45
  export function isCursorNativeToolRegistrationRequested(mode) {
20
46
  return mode !== "print" && readBooleanEnv(NATIVE_CURSOR_TOOL_REGISTRATION_ENV) !== false && isCursorNativeToolDisplayRequested(mode);
21
47
  }
22
- export function setCursorNativeToolDisplayRuntimeRequested(requested) {
23
- nativeToolDisplayRuntimeRequested = requested;
48
+ export function setCursorNativeToolDisplayRuntimeRequested(requested, pi) {
49
+ getCursorNativeToolDisplayState(pi).runtimeRequested = requested;
24
50
  }
25
51
  export function isCursorNativeToolDisplayEnabled() {
26
- return registeredNativeToolNames.size > 0;
52
+ return getCursorNativeToolDisplayState().registeredNativeToolSources.size > 0;
27
53
  }
28
- export function isCursorNativeToolDisplayRuntimeEnabled() {
29
- return nativeToolDisplayRuntimeRequested && readBooleanEnv(NATIVE_CURSOR_TOOL_DISPLAY_ENV) !== false && registeredNativeToolNames.size > 0;
54
+ export function isCursorNativeToolDisplayRuntimeEnabled(state = getCursorNativeToolDisplayState()) {
55
+ return state.runtimeRequested && readBooleanEnv(NATIVE_CURSOR_TOOL_DISPLAY_ENV) !== false && state.registeredNativeToolSources.size > 0;
30
56
  }
31
57
  export function canRenderCursorToolNatively(toolName) {
32
- return registeredNativeToolNames.has(toolName);
58
+ return getCursorNativeToolDisplayState().registeredNativeToolSources.has(toolName);
33
59
  }
34
- export function isRegisteredCursorNativeToolName(toolName) {
35
- return registeredNativeToolNames.has(toolName);
60
+ export function isRegisteredCursorNativeToolName(toolName, pi) {
61
+ return (pi ? displayStates.get(pi) : lastDisplayState)?.registeredNativeToolSources.has(toolName) === true;
36
62
  }
37
- export function recordCursorNativeToolDisplay(item) {
38
- if (!canRenderCursorToolNatively(item.toolName))
63
+ export function recordCursorNativeToolDisplay(item, state = getCursorNativeToolDisplayState()) {
64
+ if (!state.registeredNativeToolSources.has(item.toolName))
39
65
  return false;
40
66
  nativeToolResults.set(item.id, item);
67
+ resultStates.set(item.id, state);
68
+ state.resultIds.add(item.id);
41
69
  return true;
42
70
  }
43
71
  export function deleteCursorNativeToolDisplay(id) {
44
72
  nativeToolResults.delete(id);
73
+ resultStates.get(id)?.resultIds.delete(id);
74
+ resultStates.delete(id);
45
75
  }
46
- export function consumeCursorNativeToolDisplay(id) {
76
+ export function consumeCursorNativeToolDisplay(id, state, toolName) {
47
77
  const item = nativeToolResults.get(id);
48
- if (item)
49
- nativeToolResults.delete(id);
78
+ if (item) {
79
+ if (resultStates.get(id) !== state || normalizeCursorToolName(item.toolName) !== normalizeCursorToolName(toolName)) {
80
+ throw new Error(`No owned Cursor ${toolName} result was available. This replay-only call does not execute work.`);
81
+ }
82
+ deleteCursorNativeToolDisplay(id);
83
+ }
50
84
  return item;
51
85
  }
52
86
  export function isCursorReplayToolCallId(toolCallId) {
@@ -57,14 +91,15 @@ export function isCursorFileMutationToolName(toolName) {
57
91
  }
58
92
  export const __testUtils = {
59
93
  nativeToolResultCount: () => nativeToolResults.size,
60
- registerNativeToolNameForTests(toolName) {
61
- nativeToolDisplayRuntimeRequested = true;
62
- registeredNativeToolNames.add(toolName);
94
+ registerNativeToolNameForTests(toolName, pi) {
95
+ const state = getCursorNativeToolDisplayState(pi);
96
+ state.runtimeRequested = true;
97
+ state.registeredNativeToolSources.set(toolName, { path: "test", source: "inline", scope: "temporary", origin: "top-level" });
63
98
  },
64
99
  reset() {
65
- nativeToolDisplayRuntimeRequested = false;
66
- registeredNativeToolNames.clear();
67
- skippedNativeToolNames.clear();
100
+ lastDisplayState = createDisplayState();
101
+ displayStates.clear();
68
102
  nativeToolResults.clear();
103
+ resultStates.clear();
69
104
  },
70
105
  };
@@ -1,6 +1,5 @@
1
1
  import { createBashToolDefinition, createEditToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createWriteToolDefinition, } from "@earendil-works/pi-coding-agent";
2
2
  import { Text } from "@earendil-works/pi-tui";
3
- import { getCursorSessionCwd } from "./cursor-session-scope.js";
4
3
  import { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, CURSOR_REPLAY_TOOL_NAMES, } from "./cursor-native-tool-names.js";
5
4
  import { isCursorReplayToolName } from "./cursor-tool-presentation-registry.js";
6
5
  import { createCursorReplayOnlyToolDefinition, isCursorReplayNativeEditDetails, isCursorReplayNativeWriteDetails, parseCursorReplayToolDetails, renderCursorReplayResult, renderNativeLookingCursorFileMutationCall, renderNativeLookingCursorReadReplayResult, } from "./cursor-native-tool-display-replay.js";
@@ -61,12 +60,12 @@ function getNativeReplayStrategy(toolName) {
61
60
  ? NATIVE_CURSOR_TOOL_STRATEGIES[toolName]
62
61
  : undefined;
63
62
  }
64
- export function wrapNativeCursorTool(definition, getCurrentDefinition) {
63
+ export function wrapNativeCursorTool(definition, getCurrentDefinition, state) {
65
64
  const strategy = getNativeReplayStrategy(definition.name);
66
65
  return {
67
66
  ...definition,
68
67
  async execute(toolCallId, params, signal, onUpdate, ctx) {
69
- const cursorDisplay = consumeCursorNativeToolDisplay(toolCallId);
68
+ const cursorDisplay = consumeCursorNativeToolDisplay(toolCallId, state, definition.name);
70
69
  if (cursorDisplay) {
71
70
  if (cursorDisplay.isError) {
72
71
  const text = cursorDisplay.result.content
@@ -114,8 +113,8 @@ export function createNativeCursorToolDefinition(toolName, cwd) {
114
113
  return createCursorReplayOnlyToolDefinition(toolName);
115
114
  throw new Error(`Unsupported Cursor native replay tool: ${toolName}`);
116
115
  }
117
- export function registerNativeCursorTool(pi, toolName) {
118
- const definition = createNativeCursorToolDefinition(toolName, getCursorSessionCwd());
119
- pi.registerTool(wrapNativeCursorTool(definition, () => createNativeCursorToolDefinition(toolName, getCursorSessionCwd())));
116
+ export function registerNativeCursorTool(pi, toolName, getCwd, state) {
117
+ const definition = createNativeCursorToolDefinition(toolName, getCwd());
118
+ pi.registerTool(wrapNativeCursorTool(definition, () => createNativeCursorToolDefinition(toolName, getCwd()), state));
120
119
  }
121
120
  export { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, CURSOR_REPLAY_TOOL_NAMES };
@@ -1,6 +1,27 @@
1
1
  export const MCP_SERVER_NAME = "pi_tools";
2
2
  export const MCP_ENDPOINT_ROOT = "/cursor-pi-tool-bridge";
3
- const CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN = /^cursor-pi-bridge-run-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}-tool-\d+$/i;
3
+ export const CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH = 64;
4
+ const CURSOR_PI_BRIDGE_RUN_UUID_PATTERN = /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i;
5
+ const CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN = /^cursor-pi-bridge-[0-9a-f]{32}-t\d+$/i;
6
+ const LEGACY_CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN = /^cursor-pi-bridge-run-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}-tool-\d+$/i;
7
+ /**
8
+ * Build the provider-facing bridge ID while enforcing the 64-character
9
+ * call_id limit used by OpenAI-compatible Responses backends.
10
+ */
11
+ export function buildCursorPiBridgeToolCallId(runUuid, counter) {
12
+ if (!CURSOR_PI_BRIDGE_RUN_UUID_PATTERN.test(runUuid)) {
13
+ throw new Error("Cursor pi bridge run UUID must be canonical");
14
+ }
15
+ if (!Number.isSafeInteger(counter) || counter <= 0) {
16
+ throw new Error("Cursor pi bridge tool call counter must be a positive safe integer");
17
+ }
18
+ const toolCallId = `cursor-pi-bridge-${runUuid.replaceAll("-", "")}-t${counter}`;
19
+ if (toolCallId.length > CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH) {
20
+ throw new Error("Cursor pi bridge tool call ID limit exceeded");
21
+ }
22
+ return toolCallId;
23
+ }
4
24
  export function isCursorPiBridgeToolCallId(toolCallId) {
5
- return CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId);
25
+ return ((toolCallId.length <= CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH && CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId)) ||
26
+ LEGACY_CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId));
6
27
  }
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { Server as McpProtocolServer, WebStandardStreamableHTTPServerTransport, } from "@modelcontextprotocol/server";
3
3
  import { bridgeToolExecutionAbortTracker } from "./cursor-pi-tool-bridge-abort.js";
4
- import { MCP_ENDPOINT_ROOT, MCP_SERVER_NAME } from "./cursor-pi-tool-bridge-constants.js";
4
+ import { buildCursorPiBridgeToolCallId, MCP_ENDPOINT_ROOT, MCP_SERVER_NAME, } from "./cursor-pi-tool-bridge-constants.js";
5
5
  import { writeCursorPiToolBridgeDiagnostic, } from "./cursor-pi-tool-bridge-diagnostics.js";
6
6
  import { resolveCursorPiToolBridgeCallTimeoutMs } from "./cursor-pi-tool-bridge-env.js";
7
7
  import { asToolResultMessage, containsKnownMcpToolName, convertPiContentToMcpContent, normalizeMcpArgs, snapshotToolToMcpTool, waitForProtocolFlush, } from "./cursor-pi-tool-bridge-mcp.js";
@@ -15,10 +15,12 @@ export class CursorPiToolBridgeRunImpl {
15
15
  registry;
16
16
  env;
17
17
  endpointPath;
18
+ runUuid;
18
19
  callTimeoutMs;
19
20
  knownMcpToolNames;
20
21
  knownCursorMcpCallIds = new Set();
21
22
  queuedRequests = [];
23
+ pendingToolCallListeners = new Set();
22
24
  pendingByPiToolCallId = new Map();
23
25
  pendingByBridgeCallId = new Map();
24
26
  pendingByCursorMcpCallId = new Map();
@@ -36,7 +38,9 @@ export class CursorPiToolBridgeRunImpl {
36
38
  this.enabled = enabled;
37
39
  this.onToolRequest = options.onToolRequest;
38
40
  this.debugRecorder = options.debugRecorder;
39
- this.id = `cursor-pi-bridge-run-${randomUUID()}`;
41
+ const runUuid = randomUUID();
42
+ this.runUuid = runUuid;
43
+ this.id = `cursor-pi-bridge-run-${runUuid}`;
40
44
  this.endpointPath = `${MCP_ENDPOINT_ROOT}/${randomUUID()}/mcp`;
41
45
  this.callTimeoutMs = resolveCursorPiToolBridgeCallTimeoutMs(env);
42
46
  this.knownMcpToolNames = new Set(snapshot.tools.map((tool) => tool.mcpToolName));
@@ -126,6 +130,23 @@ export class CursorPiToolBridgeRunImpl {
126
130
  hasPendingPiToolCallId(piToolCallId) {
127
131
  return this.pendingByPiToolCallId.has(piToolCallId);
128
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
+ }
129
150
  cancelPendingPiToolCallId(piToolCallId, reason) {
130
151
  const pending = this.pendingByPiToolCallId.get(piToolCallId);
131
152
  if (!pending)
@@ -170,6 +191,7 @@ export class CursorPiToolBridgeRunImpl {
170
191
  return;
171
192
  this.disposed = true;
172
193
  this.cancel("Cursor pi tool bridge run disposed");
194
+ this.pendingToolCallListeners.clear();
173
195
  await waitForProtocolFlush();
174
196
  await Promise.allSettled([
175
197
  this.mcpTransport?.close(),
@@ -208,11 +230,12 @@ export class CursorPiToolBridgeRunImpl {
208
230
  return Promise.reject(new Error("Cursor pi tool bridge run is disposed"));
209
231
  this.toolCallCounter += 1;
210
232
  const bridgeCallId = `${this.id}-bridge-${this.toolCallCounter}`;
233
+ const piToolCallId = buildCursorPiBridgeToolCallId(this.runUuid, this.toolCallCounter);
211
234
  const request = {
212
235
  runId: this.id,
213
236
  bridgeCallId,
214
237
  cursorMcpCallId,
215
- piToolCallId: `${this.id}-tool-${this.toolCallCounter}`,
238
+ piToolCallId,
216
239
  piToolName,
217
240
  mcpToolName,
218
241
  args: normalizeMcpArgs(argsValue),
@@ -237,6 +260,7 @@ export class CursorPiToolBridgeRunImpl {
237
260
  this.pendingByBridgeCallId.set(request.bridgeCallId, pending);
238
261
  this.pendingByCursorMcpCallId.set(cursorMcpCallId, pending);
239
262
  this.knownCursorMcpCallIds.add(cursorMcpCallId);
263
+ this.notifyPendingToolCallsChanged();
240
264
  pending.timeout = setTimeout(() => {
241
265
  const reason = `Cursor pi bridge CallTool timed out after ${this.callTimeoutMs} ms`;
242
266
  this.rejectAndAbortPending(pending, new Error(reason));
@@ -348,5 +372,6 @@ export class CursorPiToolBridgeRunImpl {
348
372
  const queuedIndex = this.queuedRequests.findIndex((request) => request.bridgeCallId === pending.request.bridgeCallId);
349
373
  if (queuedIndex >= 0)
350
374
  this.queuedRequests.splice(queuedIndex, 1);
375
+ this.notifyPendingToolCallsChanged();
351
376
  }
352
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();
@@ -42,7 +42,7 @@ export function buildCursorPiToolBridgeSnapshot(pi, options = {}) {
42
42
  for (const tool of allTools) {
43
43
  if (!activeToolNames.has(tool.name))
44
44
  continue;
45
- if (isExcludedFromCursorBridgeExposure(tool.name) && isRegisteredCursorNativeToolName(tool.name))
45
+ if (isExcludedFromCursorBridgeExposure(tool.name) && isRegisteredCursorNativeToolName(tool.name, pi))
46
46
  continue;
47
47
  if (!exposeOverlappingBuiltins && isOverlappingCursorNativePiToolName(tool.name))
48
48
  continue;
@@ -7,6 +7,8 @@ import { LOOPBACK_HOST, CursorPiToolBridgeRegistry } from "./cursor-pi-tool-brid
7
7
  export { resolveCursorPiToolBridgeDebugEnabled } from "./cursor-pi-tool-bridge-diagnostics.js";
8
8
  export { CURSOR_PI_TOOL_BRIDGE_BUILTINS_ENV, CURSOR_PI_TOOL_BRIDGE_CALL_TIMEOUT_MS_ENV, CURSOR_PI_TOOL_BRIDGE_ENV, resolveCursorPiToolBridgeBuiltinsEnabled, resolveCursorPiToolBridgeCallTimeoutMs, resolveCursorPiToolBridgeEnabled, } from "./cursor-pi-tool-bridge-env.js";
9
9
  export { buildCursorPiToolBridgeSnapshot, buildCursorPiToolBridgeSurfaceSignature, } from "./cursor-pi-tool-bridge-snapshot.js";
10
+ const bridges = new Map();
11
+ const activeCallsByPi = new Map();
10
12
  let registeredCursorPiToolBridge;
11
13
  const WINDOWS_BRIDGE_ABORT_ENV = "PI_CURSOR_BRIDGE_TOOL_CALL_ID";
12
14
  function buildWindowsBridgeBashAbortCommand(command, marker) {
@@ -49,18 +51,27 @@ Get-CimInstance Win32_Process -Filter "Name = 'bash.exe' OR Name = 'sh.exe'" |
49
51
  });
50
52
  }
51
53
  export function registerCursorPiToolBridge(pi) {
52
- bridgeToolExecutionAbortTracker.abortAll("Cursor pi tool bridge extension reloaded");
53
- void registeredCursorPiToolBridge?.disposeAll("Cursor pi tool bridge extension reloaded");
54
+ const previous = bridges.get(pi);
55
+ if (previous) {
56
+ const reason = "Cursor pi tool bridge extension reloaded";
57
+ for (const id of activeCallsByPi.get(pi) ?? [])
58
+ bridgeToolExecutionAbortTracker.abort(id, reason);
59
+ void previous.disposeAll(reason);
60
+ }
54
61
  const bridge = new CursorPiToolBridgeRegistry(pi);
55
62
  registeredCursorPiToolBridge = bridge;
63
+ bridges.set(pi, bridge);
64
+ const activeCalls = new Set();
65
+ activeCallsByPi.set(pi, activeCalls);
56
66
  pi.on("tool_call", (event, ctx) => {
57
- if (registeredCursorPiToolBridge !== bridge)
67
+ if (bridges.get(pi) !== bridge)
58
68
  return undefined;
59
69
  if (!bridge.hasPendingPiToolCallId(event.toolCallId)) {
60
70
  return isCursorPiBridgeToolCallId(event.toolCallId)
61
71
  ? { block: true, reason: "Cursor pi bridge tool call is no longer pending" }
62
72
  : undefined;
63
73
  }
74
+ activeCalls.add(event.toolCallId);
64
75
  const windowsAbortMarker = installWindowsBridgeBashAbortMarker(event);
65
76
  const trackingStarted = bridgeToolExecutionAbortTracker.track(event.toolCallId, {
66
77
  signal: ctx.signal,
@@ -77,17 +88,26 @@ export function registerCursorPiToolBridge(pi) {
77
88
  return { block: true, reason: "Cursor pi bridge tool execution was aborted before it started" };
78
89
  });
79
90
  pi.on("tool_result", (event) => {
80
- bridgeToolExecutionAbortTracker.finish(event.toolCallId);
91
+ if (activeCalls.delete(event.toolCallId))
92
+ bridgeToolExecutionAbortTracker.finish(event.toolCallId);
81
93
  });
82
94
  pi.on("session_shutdown", async (event) => {
95
+ if (bridges.get(pi) !== bridge)
96
+ return;
83
97
  const reason = `Cursor pi tool bridge session shutdown: ${event.reason}`;
84
- bridgeToolExecutionAbortTracker.abortAll(reason);
98
+ for (const id of activeCalls)
99
+ bridgeToolExecutionAbortTracker.abort(id, reason);
100
+ activeCalls.clear();
101
+ bridges.delete(pi);
102
+ activeCallsByPi.delete(pi);
103
+ if (registeredCursorPiToolBridge === bridge)
104
+ registeredCursorPiToolBridge = [...bridges.values()].at(-1);
85
105
  await bridge.disposeAll(reason);
86
106
  });
87
107
  return bridge;
88
108
  }
89
- export function getRegisteredCursorPiToolBridge() {
90
- return registeredCursorPiToolBridge;
109
+ export function getRegisteredCursorPiToolBridge(pi) {
110
+ return pi ? bridges.get(pi) : registeredCursorPiToolBridge;
91
111
  }
92
112
  export const __testUtils = {
93
113
  CURSOR_PI_TOOL_BRIDGE_ENV,
@@ -116,8 +136,10 @@ export const __testUtils = {
116
136
  },
117
137
  resetRegisteredBridgeForTests() {
118
138
  bridgeToolExecutionAbortTracker.abortAll("Cursor pi tool bridge test reset");
119
- const bridge = registeredCursorPiToolBridge;
139
+ const registered = [...bridges.values()];
140
+ bridges.clear();
141
+ activeCallsByPi.clear();
120
142
  registeredCursorPiToolBridge = undefined;
121
- return bridge?.disposeAll("Cursor pi tool bridge test reset") ?? Promise.resolve();
143
+ return Promise.all(registered.map((bridge) => bridge.disposeAll("Cursor pi tool bridge test reset")));
122
144
  },
123
145
  };