pi-cursor-sdk 0.5.0 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (737) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +135 -34
  3. package/dist/context.js +55 -36
  4. package/dist/cursor-api-key.js +34 -19
  5. package/dist/cursor-cloud-options.js +1 -0
  6. package/dist/cursor-config.js +59 -0
  7. package/dist/cursor-custom-store-path.js +177 -0
  8. package/dist/cursor-custom-subagent-definitions.js +14 -0
  9. package/dist/cursor-fallback-models.generated.js +402 -1
  10. package/dist/cursor-fallback-warning.js +8 -2
  11. package/dist/cursor-live-run-coordinator.js +22 -2
  12. package/dist/cursor-local-agent-ownership.js +17 -0
  13. package/dist/cursor-mcp-timeout-override.js +3 -1
  14. package/dist/cursor-pi-tool-bridge-diagnostics.js +4 -0
  15. package/dist/cursor-pi-tool-bridge-run.js +31 -3
  16. package/dist/cursor-pi-tool-bridge-server.js +1 -1
  17. package/dist/cursor-provider-binding.js +70 -10
  18. package/dist/cursor-provider-errors.js +33 -26
  19. package/dist/cursor-provider-live-run-drain.js +10 -4
  20. package/dist/cursor-provider-run-finalizer.js +2 -1
  21. package/dist/cursor-provider-turn-prepare.js +25 -9
  22. package/dist/cursor-provider-turn-summary.js +1 -1
  23. package/dist/cursor-provider-turn-tool-ledger.js +13 -7
  24. package/dist/cursor-provider.js +2 -1
  25. package/dist/cursor-question-tool.js +5 -5
  26. package/dist/cursor-request-provenance.js +13 -2
  27. package/dist/cursor-sdk-output-filter.js +1 -1
  28. package/dist/cursor-sdk-process-error-guard.js +1 -3
  29. package/dist/cursor-sdk-runtime.js +13 -14
  30. package/dist/cursor-sdk-vendor-env.js +20 -0
  31. package/dist/cursor-session-agent-cleanup.js +38 -26
  32. package/dist/cursor-session-agent-lifecycle.js +2 -2
  33. package/dist/cursor-session-agent-lineage.js +11 -7
  34. package/dist/cursor-session-agent-resume.js +15 -9
  35. package/dist/cursor-session-agent.js +60 -23
  36. package/dist/cursor-session-scope.js +27 -14
  37. package/dist/cursor-session-send-policy.js +2 -2
  38. package/dist/cursor-session-settings.js +3 -3
  39. package/dist/cursor-session-store.js +235 -45
  40. package/dist/cursor-state.js +23 -9
  41. package/dist/cursor-tool-manifest.js +1 -1
  42. package/dist/index.js +21 -19
  43. package/dist/model-discovery.js +58 -26
  44. package/dist/model-list-cache.js +12 -1
  45. package/docs/cursor-live-smoke-checklist.md +2 -2
  46. package/docs/cursor-model-ux-spec.md +83 -30
  47. package/docs/cursor-native-tool-replay.md +16 -5
  48. package/docs/cursor-native-tool-visual-audit.md +1 -1
  49. package/docs/cursor-testing-lessons.md +63 -7
  50. package/docs/cursor-tool-surfaces.md +19 -4
  51. package/node_modules/@hono/node-server/README.md +21 -10
  52. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  53. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  54. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  55. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  56. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  57. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  58. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  59. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  60. package/node_modules/@hono/node-server/package.json +3 -2
  61. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
  62. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
  63. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
  64. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
  65. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
  66. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
  67. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
  68. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
  69. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
  70. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
  71. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
  72. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
  73. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
  74. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
  75. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
  76. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
  77. package/node_modules/@modelcontextprotocol/core/package.json +2 -2
  78. package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
  79. package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
  80. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
  81. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
  82. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
  83. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
  84. package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
  85. package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
  86. package/node_modules/@modelcontextprotocol/server/README.md +1 -7
  87. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
  88. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
  89. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
  90. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
  91. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
  92. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
  93. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
  94. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
  95. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
  96. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
  97. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
  98. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
  99. package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
  100. package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
  101. package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
  102. package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
  103. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
  104. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
  105. package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
  106. package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
  107. package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
  108. package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
  109. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
  110. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
  111. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
  112. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
  113. package/node_modules/@modelcontextprotocol/server/package.json +4 -4
  114. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  115. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  116. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  117. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  118. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  119. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  120. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  121. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  122. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  123. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  124. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  125. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  126. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  127. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  128. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  129. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  130. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  131. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  132. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  133. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  134. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  135. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  136. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  137. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  138. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  139. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  140. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  141. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  142. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  143. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  144. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  145. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  146. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  147. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  148. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  149. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  150. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  151. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  152. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  153. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  154. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  155. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  156. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  157. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  158. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  159. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  160. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  161. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  162. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  163. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  164. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  165. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  166. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  167. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  168. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  169. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  170. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  171. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  172. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  173. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  174. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  175. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  176. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  177. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  178. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  179. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  180. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  181. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  182. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  183. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  184. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  185. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  186. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  187. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  188. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  189. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  190. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  191. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  192. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  193. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  194. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  195. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  196. package/node_modules/hono/dist/cjs/compose.js +49 -66
  197. package/node_modules/hono/dist/cjs/context.js +379 -450
  198. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  199. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  200. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  201. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  202. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  203. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  204. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  205. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  206. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  207. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  208. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  209. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  210. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  211. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  212. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  213. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  214. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  215. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  216. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  217. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  218. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  219. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  220. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  221. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  222. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  223. package/node_modules/hono/dist/cjs/hono-base.js +347 -403
  224. package/node_modules/hono/dist/cjs/hono.js +28 -42
  225. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  226. package/node_modules/hono/dist/cjs/index.js +22 -30
  227. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  228. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  229. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  230. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  231. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  232. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  233. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  234. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  235. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  236. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  237. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  238. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  239. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  240. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  241. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  242. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  243. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  244. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  245. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  246. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  247. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  248. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  249. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  250. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  251. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  252. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  253. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  254. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  255. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  256. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  257. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  258. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  259. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  260. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  261. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  262. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  263. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  264. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  265. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  266. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  267. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  268. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  269. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  270. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  271. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  272. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  273. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  274. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  275. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  276. package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
  277. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  278. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  279. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  280. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  281. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  282. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  283. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  284. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  285. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  286. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  287. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  288. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  289. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  290. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  291. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  292. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  293. package/node_modules/hono/dist/cjs/request.js +334 -346
  294. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  295. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  296. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  297. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  298. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  299. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  300. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  301. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  302. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  303. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  304. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  305. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  306. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  307. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  308. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  309. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  310. package/node_modules/hono/dist/cjs/router.js +37 -37
  311. package/node_modules/hono/dist/cjs/types.js +5 -28
  312. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  313. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  314. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  315. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  316. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  317. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  318. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  319. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  320. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  321. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  322. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  323. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  324. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  325. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  326. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  327. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  328. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  329. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  330. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  331. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  332. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  333. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  334. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  335. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  336. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  337. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  338. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  339. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  340. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  341. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  342. package/node_modules/hono/dist/client/client.js +138 -197
  343. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  344. package/node_modules/hono/dist/client/index.js +3 -7
  345. package/node_modules/hono/dist/client/types.js +1 -0
  346. package/node_modules/hono/dist/client/utils.js +51 -68
  347. package/node_modules/hono/dist/compose.js +49 -45
  348. package/node_modules/hono/dist/context.js +376 -426
  349. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  350. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  351. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  352. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  353. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  354. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  355. package/node_modules/hono/dist/helper/css/common.js +167 -225
  356. package/node_modules/hono/dist/helper/css/index.js +132 -137
  357. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  358. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  359. package/node_modules/hono/dist/helper/html/index.js +30 -39
  360. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  361. package/node_modules/hono/dist/helper/route/index.js +121 -43
  362. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  363. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  364. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  365. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  366. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  367. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  368. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  369. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  370. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  371. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  372. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  373. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  374. package/node_modules/hono/dist/hono-base.js +344 -379
  375. package/node_modules/hono/dist/hono.js +27 -20
  376. package/node_modules/hono/dist/http-exception.js +53 -33
  377. package/node_modules/hono/dist/index.js +19 -6
  378. package/node_modules/hono/dist/jsx/base.js +231 -340
  379. package/node_modules/hono/dist/jsx/children.js +16 -20
  380. package/node_modules/hono/dist/jsx/components.js +118 -170
  381. package/node_modules/hono/dist/jsx/constants.js +9 -15
  382. package/node_modules/hono/dist/jsx/context.js +153 -150
  383. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  384. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  385. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  386. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  387. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  388. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  389. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  390. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  391. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  392. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  393. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  394. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  395. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  396. package/node_modules/hono/dist/jsx/index.js +45 -98
  397. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  398. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  399. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  400. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  401. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  402. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  403. package/node_modules/hono/dist/jsx/types.js +1 -0
  404. package/node_modules/hono/dist/jsx/utils.js +105 -168
  405. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  406. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  407. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  408. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  409. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  410. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  411. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  412. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  413. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  414. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  415. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  416. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  417. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  418. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  419. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  420. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  421. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  422. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  423. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  424. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  425. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  426. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  427. package/node_modules/hono/dist/middleware/mount/index.js +70 -0
  428. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  429. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  430. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  431. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  432. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  433. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  434. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  435. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  436. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  437. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  438. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  439. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  440. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  441. package/node_modules/hono/dist/preset/quick.js +17 -15
  442. package/node_modules/hono/dist/preset/tiny.js +14 -11
  443. package/node_modules/hono/dist/request/constants.js +4 -5
  444. package/node_modules/hono/dist/request.js +328 -319
  445. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  446. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  447. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  448. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  449. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  450. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  451. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  452. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  453. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  454. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  455. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  456. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  457. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  458. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  459. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  460. package/node_modules/hono/dist/router/utils.js +4 -5
  461. package/node_modules/hono/dist/router.js +35 -14
  462. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  463. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  464. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  465. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  466. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  467. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  468. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  469. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  470. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  471. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  472. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  473. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  474. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  475. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  476. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  477. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  478. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  479. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  480. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  481. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  482. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  483. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  484. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  485. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  486. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  487. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  488. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  489. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  490. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  491. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  492. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  493. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  494. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  495. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  496. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  497. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  498. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  499. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  500. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  501. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  502. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  503. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  504. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  505. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  506. package/node_modules/hono/dist/types/context.d.ts +335 -335
  507. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  508. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  509. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  510. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  511. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  512. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  513. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  514. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  515. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  516. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  517. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  518. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  519. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  520. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  521. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  522. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  523. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  524. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  525. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  526. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  527. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  528. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  529. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  530. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  531. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  532. package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
  533. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  534. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  535. package/node_modules/hono/dist/types/index.d.ts +6 -37
  536. package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
  537. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  538. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  539. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  540. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  541. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  542. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  543. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  544. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  545. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  546. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  547. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  548. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  549. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  550. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  551. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  552. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  553. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  554. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  555. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  556. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  557. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  558. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  559. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  560. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  561. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  562. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  563. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  564. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  565. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  566. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  567. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  568. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  569. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  570. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  571. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  572. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  573. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  574. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  575. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  576. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  577. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  578. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  579. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  580. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  581. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  582. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  583. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  584. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  585. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
  586. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  587. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  588. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  589. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  590. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  591. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  592. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  593. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  594. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  595. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  596. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  597. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  598. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  599. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  600. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  601. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  602. package/node_modules/hono/dist/types/request.d.ts +288 -286
  603. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  604. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  605. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  606. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  607. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  608. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  609. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  610. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  611. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  612. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  613. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  614. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  615. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  616. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  617. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  618. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  619. package/node_modules/hono/dist/types/router.d.ts +23 -22
  620. package/node_modules/hono/dist/types/types.d.ts +146 -505
  621. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  622. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  623. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  624. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  625. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  626. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  627. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  628. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  629. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  630. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  631. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  632. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  633. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  634. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  635. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  636. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  637. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  638. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  639. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  640. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  641. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  642. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  643. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  644. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  645. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  646. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  647. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  648. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  649. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  650. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  651. package/node_modules/hono/dist/types.js +4 -6
  652. package/node_modules/hono/dist/utils/accept.js +185 -212
  653. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  654. package/node_modules/hono/dist/utils/body.js +87 -92
  655. package/node_modules/hono/dist/utils/buffer.js +44 -71
  656. package/node_modules/hono/dist/utils/color.js +33 -21
  657. package/node_modules/hono/dist/utils/compress.js +11 -5
  658. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  659. package/node_modules/hono/dist/utils/constants.js +7 -5
  660. package/node_modules/hono/dist/utils/cookie.js +114 -163
  661. package/node_modules/hono/dist/utils/crypto.js +30 -40
  662. package/node_modules/hono/dist/utils/encode.js +30 -26
  663. package/node_modules/hono/dist/utils/filepath.js +23 -33
  664. package/node_modules/hono/dist/utils/handler.js +10 -11
  665. package/node_modules/hono/dist/utils/headers.js +1 -0
  666. package/node_modules/hono/dist/utils/html.js +97 -117
  667. package/node_modules/hono/dist/utils/http-status.js +1 -0
  668. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  669. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  670. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  671. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  672. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  673. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  674. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  675. package/node_modules/hono/dist/utils/mime.js +74 -79
  676. package/node_modules/hono/dist/utils/stream.js +86 -88
  677. package/node_modules/hono/dist/utils/types.js +1 -0
  678. package/node_modules/hono/dist/utils/url.js +187 -215
  679. package/node_modules/hono/dist/validator/index.js +1 -4
  680. package/node_modules/hono/dist/validator/utils.js +1 -0
  681. package/node_modules/hono/dist/validator/validator.js +61 -83
  682. package/node_modules/hono/package.json +35 -27
  683. package/package.json +20 -18
  684. package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
  685. package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
  686. package/scripts/platform-smoke/artifacts.mjs +7 -1
  687. package/shared/cursor-sdk-output-filter.d.mts +3 -0
  688. package/shared/cursor-sdk-output-filter.mjs +117 -44
  689. package/src/context.ts +59 -35
  690. package/src/cursor-api-key.ts +37 -17
  691. package/src/cursor-cloud-options.ts +2 -0
  692. package/src/cursor-config.ts +76 -0
  693. package/src/cursor-custom-store-path.ts +151 -0
  694. package/src/cursor-custom-subagent-definitions.ts +21 -0
  695. package/src/cursor-fallback-models.generated.ts +402 -1
  696. package/src/cursor-fallback-warning.ts +7 -3
  697. package/src/cursor-live-run-coordinator.ts +21 -2
  698. package/src/cursor-local-agent-ownership.ts +18 -0
  699. package/src/cursor-mcp-timeout-override.ts +3 -1
  700. package/src/cursor-pi-tool-bridge-diagnostics.ts +17 -0
  701. package/src/cursor-pi-tool-bridge-run.ts +31 -3
  702. package/src/cursor-pi-tool-bridge-server.ts +1 -2
  703. package/src/cursor-pi-tool-bridge-types.ts +3 -0
  704. package/src/cursor-provider-binding.ts +70 -11
  705. package/src/cursor-provider-errors.ts +32 -28
  706. package/src/cursor-provider-live-run-drain.ts +9 -4
  707. package/src/cursor-provider-run-finalizer.ts +2 -1
  708. package/src/cursor-provider-turn-prepare.ts +28 -13
  709. package/src/cursor-provider-turn-summary.ts +1 -1
  710. package/src/cursor-provider-turn-tool-ledger.ts +12 -7
  711. package/src/cursor-provider.ts +3 -1
  712. package/src/cursor-question-tool.ts +5 -5
  713. package/src/cursor-request-provenance.ts +18 -3
  714. package/src/cursor-sdk-output-filter.ts +2 -0
  715. package/src/cursor-sdk-process-error-guard.ts +1 -2
  716. package/src/cursor-sdk-runtime.ts +14 -15
  717. package/src/cursor-sdk-vendor-env.ts +22 -0
  718. package/src/cursor-session-agent-cleanup.ts +33 -27
  719. package/src/cursor-session-agent-lifecycle.ts +2 -2
  720. package/src/cursor-session-agent-lineage.ts +10 -5
  721. package/src/cursor-session-agent-resume.ts +14 -7
  722. package/src/cursor-session-agent.ts +67 -24
  723. package/src/cursor-session-scope.ts +33 -11
  724. package/src/cursor-session-send-policy.ts +2 -2
  725. package/src/cursor-session-settings.ts +3 -3
  726. package/src/cursor-session-store.ts +259 -53
  727. package/src/cursor-state.ts +32 -7
  728. package/src/cursor-tool-manifest.ts +1 -1
  729. package/src/index.ts +19 -19
  730. package/src/model-discovery.ts +68 -30
  731. package/src/model-list-cache.ts +11 -1
  732. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
  733. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
  734. package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
  735. package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
  736. package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
  737. package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
@@ -1,5 +1,8 @@
1
- import type { ExtensionAPI, ProviderModelConfig } from "@earendil-works/pi-coding-agent";
2
- import { CURSOR_API_KEY_CONFIG_VALUE } from "./cursor-api-key.js";
1
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
2
+ import type { Model, Provider } from "@earendil-works/pi-ai";
3
+ import { cursorApiKeyAuth, normalizeCursorApiKey, resolveCursorCredentialApiKey } from "./cursor-api-key.js";
4
+ import { discoverModels, type CursorModelFallbackIssue } from "./model-discovery.js";
5
+ import { clearModelListCache } from "./model-list-cache.js";
3
6
  import { captureCursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
4
7
  import { captureCursorUsageRecorder, type CursorUsageRecorder } from "./cursor-usage-ledger.js";
5
8
  import { getCursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
@@ -7,24 +10,30 @@ import { getRegisteredCursorPiToolBridge } from "./cursor-pi-tool-bridge.js";
7
10
  import { createCursorLazyStream } from "./cursor-provider-lazy.js";
8
11
  import { getCursorSessionScopeSnapshot } from "./cursor-session-scope.js";
9
12
  import { captureCursorRequestProjection, resolveCursorRequestProvenance, type CursorRequestProjectionSnapshot, type CursorRequestProvenance } from "./cursor-request-provenance.js";
13
+ import type { CursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
10
14
 
11
- 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.";
15
+ 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.";
12
16
  interface ProviderBinding { active: boolean; closed: boolean }
13
17
  interface RequestReceipt {
14
18
  binding: ProviderBinding;
15
19
  scope: ReturnType<typeof getCursorSessionScopeSnapshot>;
16
20
  projection: CursorRequestProjectionSnapshot;
17
21
  usageRecorder: CursorUsageRecorder;
22
+ reportSdkNotice: CursorSdkOutputNoticeHandler;
18
23
  }
19
24
  const requestOwners = new WeakMap<object, RequestReceipt>();
20
25
 
21
26
  /** One closure per ExtensionAPI, including direct compaction/tree/bug-report streams. */
22
- export function registerCursorProviderBinding(pi: Pick<ExtensionAPI, "on" | "registerProvider" | "appendEntry">) {
27
+ export function registerCursorProviderBinding(
28
+ pi: Pick<ExtensionAPI, "on" | "registerProvider" | "appendEntry">,
29
+ ) {
23
30
  const binding: ProviderBinding = { active: false, closed: false };
31
+ let registry: ExtensionContext["modelRegistry"] | undefined;
24
32
  const operations = new WeakMap<AbortSignal, CursorRequestProvenance["purpose"]>();
25
33
  pi.on("session_before_compact", (event) => { operations.set(event.signal, "compaction"); });
26
34
  pi.on("session_before_tree", (event) => { operations.set(event.signal, "tree"); });
27
35
  pi.on("before_provider_headers", (event, ctx) => {
36
+ const notices = new Set<string>();
28
37
  // Pi's SDK supplies this session-owned callback for ordinary and auxiliary
29
38
  // streams. ModelRuntime forwards the same real headers object to the provider.
30
39
  requestOwners.set(event.headers, {
@@ -32,6 +41,14 @@ export function registerCursorProviderBinding(pi: Pick<ExtensionAPI, "on" | "reg
32
41
  scope: getCursorSessionScopeSnapshot(pi),
33
42
  projection: captureCursorRequestProjection(ctx.sessionManager),
34
43
  usageRecorder: captureCursorUsageRecorder(pi, ctx),
44
+ reportSdkNotice: (kind, message) => {
45
+ if (!binding.active || binding.closed) return false;
46
+ if (notices.has(kind)) return;
47
+ pi.appendEntry("pi-cursor-sdk:capability-notice", { kind, message });
48
+ if (ctx.hasUI) ctx.ui.notify(message, "warning");
49
+ else console.warn(message);
50
+ notices.add(kind);
51
+ },
35
52
  });
36
53
  });
37
54
  const stream = createCursorLazyStream((model, context, options) => {
@@ -48,15 +65,57 @@ export function registerCursorProviderBinding(pi: Pick<ExtensionAPI, "on" | "reg
48
65
  bridge: getRegisteredCursorPiToolBridge(pi),
49
66
  nativeDisplay: getCursorNativeToolDisplayState(pi),
50
67
  recordCloudLifecycle: captureCursorCloudLifecycleRecorder(pi),
68
+ reportSdkNotice: owner.reportSdkNotice,
51
69
  };
52
70
  });
53
- pi.on("session_start", () => { if (!binding.closed) binding.active = true; });
54
- pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; });
55
- return (models: ProviderModelConfig[]) => {
71
+ pi.on("session_start", async (_event, ctx) => {
56
72
  if (binding.closed) return;
57
- pi.registerProvider("cursor", {
58
- name: "Cursor", baseUrl: "https://cursor.com", apiKey: CURSOR_API_KEY_CONFIG_VALUE,
59
- api: "cursor-sdk", models, streamSimple: stream,
60
- });
73
+ binding.active = true;
74
+ registry = ctx.modelRegistry;
75
+ // The genuine extension context supplies composed config auth; startup
76
+ // selection already has the known baseline, without reading a default store.
77
+ await registry.refresh({ providers: ["cursor"], allowNetwork: false });
78
+ });
79
+ pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; registry = undefined; });
80
+ return (models: Awaited<ReturnType<typeof discoverModels>>, onCatalog: (issue?: CursorModelFallbackIssue) => void) => {
81
+ if (binding.closed) return;
82
+ const toNative = (definitions: typeof models): Model<"cursor-sdk">[] =>
83
+ definitions.map(({ compat: _compat, ...definition }) => ({
84
+ ...definition, provider: "cursor", api: "cursor-sdk", baseUrl: "https://cursor.com",
85
+ }));
86
+ let current = toNative(models);
87
+ const provider: Provider<"cursor-sdk"> = {
88
+ id: "cursor", name: "Cursor", baseUrl: "https://cursor.com",
89
+ auth: { apiKey: cursorApiKeyAuth() },
90
+ getModels: () => current,
91
+ stream: stream,
92
+ streamSimple: stream,
93
+ async refreshModels(context) {
94
+ if (binding.closed) return;
95
+ const resolved = await registry?.getProviderAuth("cursor");
96
+ context.signal.throwIfAborted();
97
+ const credential = context.credential;
98
+ const apiKey = registry
99
+ ? normalizeCursorApiKey(resolved?.auth.apiKey)
100
+ : credential && credential.type !== "api_key" ? undefined
101
+ : await resolveCursorCredentialApiKey(credential, async () => process.env.CURSOR_API_KEY);
102
+ let issue: CursorModelFallbackIssue | undefined;
103
+ await discoverModels({
104
+ apiKey, allowNetwork: context.allowNetwork, forceRefresh: context.force, signal: context.signal,
105
+ onFallback: (next) => { issue = next; },
106
+ publish: (definitions, update) => context.publish({
107
+ update: () => {
108
+ if (binding.closed) return;
109
+ update();
110
+ current = toNative(definitions);
111
+ // Do not infer logout before native composed auth is reachable.
112
+ if (registry && !apiKey) clearModelListCache();
113
+ onCatalog(issue);
114
+ },
115
+ }),
116
+ });
117
+ },
118
+ };
119
+ pi.registerProvider(provider);
61
120
  };
62
121
  }
@@ -143,7 +143,10 @@ function collectConnectErrorStacks(error: unknown, record: Record<string, unknow
143
143
 
144
144
  function isConnectError(error: unknown, record: Record<string, unknown> | undefined): boolean {
145
145
  const name = error instanceof Error ? error.name : getErrorStringField(record, "name");
146
- return name === "ConnectError";
146
+ if (name === "ConnectError") return true;
147
+ // @cursor/sdk convertConnectError re-wraps backend ConnectErrors (name -> NetworkError,
148
+ // code -> "unavailable") and leaves the original ConnectError on `.cause` without outer details.
149
+ return getErrorStringField(asRecord(record?.cause), "name") === "ConnectError";
147
150
  }
148
151
 
149
152
  function isUnauthenticatedConnectCode(code: unknown): boolean {
@@ -160,13 +163,12 @@ function isCursorSdkStallAbortNetworkError(code: unknown, evidence: string, stac
160
163
  /(?:operation was aborted|canceled)/i.test(evidence) &&
161
164
  /(?:AbortError|operation was aborted)/i.test(`${evidence}\n${stackEvidence}`) &&
162
165
  stackEvidence.includes("@cursor/sdk") &&
163
- stackEvidence.includes("@connectrpc/connect-node") &&
164
166
  /\b(?:onStall|reportStall|StallDetected)\b/i.test(stackEvidence)
165
167
  );
166
168
  }
167
169
 
168
170
  /**
169
- * @cursor/sdk@1.0.32 throws internal RetriableError (name/kind "RetriableError") with message
171
+ * @cursor/sdk@1.0.37 throws internal RetriableError (name/kind "RetriableError") with message
170
172
  * "Connection stalled" or "Connection stalled repeatedly" after fetchWithRetry exhausts stalls.
171
173
  * The ConnectError is only the cause; the top-level error is not a ConnectError.
172
174
  */
@@ -181,30 +183,26 @@ export function isCursorSdkConnectionStalledError(error: unknown): boolean {
181
183
  return /(?:^|[\\/])node_modules[\\/]@cursor[\\/]sdk[\\/]dist[\\/]/.test(stack) || stack.includes("@cursor/sdk");
182
184
  }
183
185
 
184
- function isCursorExtensionConnectStack(stack: string): boolean {
185
- // pi runs Cursor SDK in Node, where the SDK dynamically imports connect-node.
186
- // connect-web is the SDK's Bun/Deno path and is intentionally not classified for supported pi runs.
187
- return stack.includes("@connectrpc/connect-node") && /(?:^|[\\/])pi-cursor-sdk(?:[\\/]|$)/.test(stack);
188
- }
189
-
190
186
  function getCursorConnectSource(error: unknown, record: Record<string, unknown> | undefined): CursorConnectErrorSource {
191
- const stack = getErrorStack(error, record);
187
+ const stack = collectConnectErrorStacks(error, record);
188
+ // Node/Bun use the SDK's vendored transport; Deno uses connect-web.
192
189
  if (stack.includes("@cursor/sdk")) return "cursor-sdk-stack";
193
- if (isCursorExtensionConnectStack(stack)) return "cursor-extension-connect-stack";
194
- const details = Array.isArray(record?.details) ? record.details : [];
195
- const hasCursorBackendDetails = details.some((detail) => {
196
- const type = getErrorStringField(asRecord(detail), "type");
197
- return typeof type === "string" && type.startsWith("aiserver.");
198
- });
199
- if (hasCursorBackendDetails) return "cursor-backend-details";
200
- return stack.includes("@connectrpc/connect-node") ? "connect-node-stack" : "generic-connect";
190
+ let current = record;
191
+ for (let depth = 0; depth < 3 && current; depth += 1) {
192
+ const details = Array.isArray(current.details) ? current.details : [];
193
+ const hasCursorBackendDetails = details.some((detail) => {
194
+ const type = getErrorStringField(asRecord(detail), "type");
195
+ return typeof type === "string" && type.startsWith("aiserver.");
196
+ });
197
+ if (hasCursorBackendDetails) return "cursor-backend-details";
198
+ current = asRecord(current.cause);
199
+ }
200
+ return "generic-connect";
201
201
  }
202
202
 
203
203
  export type CursorConnectErrorSource =
204
204
  | "cursor-sdk-stack"
205
- | "cursor-extension-connect-stack"
206
205
  | "cursor-backend-details"
207
- | "connect-node-stack"
208
206
  | "generic-connect";
209
207
 
210
208
  export type CursorConnectErrorClassification =
@@ -225,20 +223,26 @@ export function classifyCursorConnectError(error: unknown): CursorConnectErrorCl
225
223
  const evidence = collectConnectErrorEvidence(error, record);
226
224
  const stackEvidence = collectConnectErrorStacks(error, record);
227
225
 
226
+ if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
227
+ return { kind: "network", source: getCursorConnectSource(error, record) };
228
+ }
229
+
230
+ const directAbort = (code === 1 || code === "canceled") &&
231
+ (causeName === "AbortError" || /AbortError/.test(stack));
232
+ // The vendored SDK transport can wrap a canceled ConnectError as Unknown.
233
+ // Require the observed canceled -> AbortError cause chain, not generic text.
234
+ const wrappedAbort = (code === 2 || code === "unknown") &&
235
+ causeName === "ConnectError" &&
236
+ (cause?.code === 1 || cause?.code === "canceled") &&
237
+ asRecord(cause?.cause)?.name === "AbortError";
228
238
  if (
229
- (code === 1 || code === "canceled") &&
239
+ (directAbort || wrappedAbort) &&
230
240
  Boolean(rawMessage && /(?:operation was aborted|canceled)/i.test(rawMessage)) &&
231
- (causeName === "AbortError" || /AbortError/.test(stack)) &&
232
- stack.includes("@cursor/sdk") &&
233
- stack.includes("@connectrpc/connect-node")
241
+ stack.includes("@cursor/sdk")
234
242
  ) {
235
243
  return { kind: "abort", source: "cursor-sdk-stack" };
236
244
  }
237
245
 
238
- if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
239
- return { kind: "network", source: getCursorConnectSource(error, record) };
240
- }
241
-
242
246
  if (isUnauthenticatedConnectCode(code) || isLikelyAuthError(evidence)) {
243
247
  return { kind: "unauthenticated", source: getCursorConnectSource(error, record) };
244
248
  }
@@ -30,13 +30,18 @@ import { partitionNativeToolsByActiveContext } from "./cursor-native-replay-rout
30
30
  import type { CursorSdkEventDebugRecorder } from "./cursor-sdk-event-debug.js";
31
31
 
32
32
  export const DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS = 5 * 60 * 1000;
33
+ function parseCursorNativeReplayIdleDisposeMs(raw: string | undefined): number {
34
+ if (!raw || /[^0-9]/.test(raw)) return DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
35
+ const value = Number(raw);
36
+ return value >= 1 && value <= 2147483647 ? value : DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
37
+ }
33
38
  const CURSOR_NATIVE_REPLAY_TOOL_ID_PATTERN = /^(cursor-replay-\d+-\d+)-tool-\d+$/;
34
39
 
35
40
  interface CursorLiveTurnState {
36
41
  emitter: CursorPartialContentEmitter;
37
42
  emittedText: string;
38
43
  }
39
- let cursorNativeReplayIdleDisposeMs = DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
44
+ let cursorNativeReplayIdleDisposeMsOverride: number | undefined;
40
45
 
41
46
  type CursorLiveRunDrainMode = "emit" | "chain_user_input";
42
47
  type CursorLiveRunDrainOutcome = "tool_use" | "stop" | "error" | "aborted" | "chain_user_input";
@@ -50,7 +55,7 @@ export async function abandonSessionCursorAgent(scopeKey: string | undefined): P
50
55
  }
51
56
 
52
57
  export const cursorLiveRuns = createCursorLiveRunCoordinator({
53
- getIdleDisposeMs: () => cursorNativeReplayIdleDisposeMs,
58
+ getIdleDisposeMs: () => cursorNativeReplayIdleDisposeMsOverride ?? parseCursorNativeReplayIdleDisposeMs(process.env.PI_CURSOR_LIVE_RUN_IDLE_DISPOSE_MS),
54
59
  deleteNativeToolDisplay: deleteCursorNativeToolDisplay,
55
60
  abandonSessionAgent: (scopeKey) => abandonSessionCursorAgent(scopeKey),
56
61
  });
@@ -497,11 +502,11 @@ export async function drainExistingCursorLiveRunBeforeSend(
497
502
  }
498
503
 
499
504
  export function setCursorNativeReplayIdleDisposeMs(value: number): void {
500
- cursorNativeReplayIdleDisposeMs = value;
505
+ cursorNativeReplayIdleDisposeMsOverride = value;
501
506
  }
502
507
 
503
508
  export function resetCursorNativeReplayIdleDisposeMs(): void {
504
- cursorNativeReplayIdleDisposeMs = DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
509
+ cursorNativeReplayIdleDisposeMsOverride = undefined;
505
510
  }
506
511
 
507
512
  export async function releaseAllPendingCursorLiveRunsForTests(): Promise<void> {
@@ -145,12 +145,12 @@ export class CursorRunFinalizer {
145
145
  sendResult: CursorProviderTurnSendResult | undefined,
146
146
  liveCompletion: CursorLiveRunCompletion | undefined,
147
147
  ): Promise<void> {
148
- this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
149
148
  const abortRegistration = sendResult?.abortRegistration;
150
149
  this.params.runnerParams.sdkEventDebugRef.current = undefined;
151
150
  if (liveCompletion) {
152
151
  void liveCompletion.waitCompletion
153
152
  .finally(async () => {
153
+ this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
154
154
  if (abortRegistration) {
155
155
  this.safeCleanup(() => abortRegistration.signal.removeEventListener("abort", abortRegistration.listener));
156
156
  }
@@ -160,6 +160,7 @@ export class CursorRunFinalizer {
160
160
  .catch(() => {});
161
161
  return;
162
162
  }
163
+ this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
163
164
  if (abortRegistration) {
164
165
  this.safeCleanup(() => abortRegistration.signal.removeEventListener("abort", abortRegistration.listener));
165
166
  }
@@ -1,6 +1,6 @@
1
1
  import type { Context, SimpleStreamOptions } from "@earendil-works/pi-ai";
2
2
  import { getCursorConversationMessages, resolveCursorPiContext } from "./cursor-pi-context.js";
3
- import type { AgentModeOption, ModelSelection, SDKAgent } from "@cursor/sdk";
3
+ import type { AgentModeOption, AgentOptions, ModelSelection, SDKAgent } from "@cursor/sdk";
4
4
  import { configureCursorSdkHttp1 } from "./cursor-http1.js";
5
5
  import { installCursorMcpToolTimeoutOverride } from "./cursor-mcp-timeout-override.js";
6
6
  import { ensureCursorRipgrepPath } from "./cursor-ripgrep-path.js";
@@ -13,7 +13,7 @@ import {
13
13
  type CursorSessionSendPlan,
14
14
  } from "./cursor-session-agent.js";
15
15
  import type { CursorPiBridgeToolRequest } from "./cursor-pi-tool-bridge.js";
16
- import { buildCursorPrompt, estimateCursorPromptTokens } from "./context.js";
16
+ import { buildCursorPrompt, estimateCursorPromptTokens, getCursorPendingInput } from "./context.js";
17
17
  import { getCursorPromptOptions } from "./cursor-usage-accounting.js";
18
18
  import { getActiveContextToolNames } from "./cursor-context-tools.js";
19
19
  import type { CursorLiveRun } from "./cursor-live-run-coordinator.js";
@@ -29,6 +29,7 @@ import {
29
29
  } from "./cursor-state.js";
30
30
  import { resolveEffectiveCursorConfig } from "./cursor-runtime-state.js";
31
31
  import type { CursorResolvedSdkConfig } from "./cursor-config.js";
32
+ import { buildCursorCustomSubagentDefinitions } from "./cursor-custom-subagent-definitions.js";
32
33
  import { buildCursorModelSelection } from "./model-discovery.js";
33
34
  import { getEffectiveCursorSettingSources } from "./cursor-setting-sources.js";
34
35
  import {
@@ -74,14 +75,20 @@ interface PrepareCursorProviderTurnContext extends PrepareCursorProviderTurnPara
74
75
  agentMode: AgentModeOption;
75
76
  selection: ModelSelection;
76
77
  fastEnabled: boolean | undefined;
78
+ agents: AgentOptions["agents"];
79
+ customSubagentNames: string[] | undefined;
77
80
  }
78
81
 
79
- function buildCursorCloudPromptContext(context: Context, handoff: "fresh" | "bootstrap" | "never"): Context {
82
+ function buildCursorCloudPromptContext(context: Context, handoff: "fresh" | "bootstrap" | "never", nativeSourceRoles?: readonly string[]): Context {
80
83
  if (handoff === "bootstrap") return context;
81
84
  // Fresh cloud runs omit history, not the current Pi instructions. Replay before
82
85
  // selecting the user message, otherwise transcript-only inputs lose the prompt.
83
86
  const current = resolveCursorPiContext(context);
84
87
  const messages = getCursorConversationMessages(context);
88
+ if (nativeSourceRoles) {
89
+ const { start } = getCursorPendingInput(messages, nativeSourceRoles);
90
+ return { ...current, messages: messages.slice(start) };
91
+ }
85
92
  for (let index = messages.length - 1; index >= 0; index -= 1) {
86
93
  const message = messages[index];
87
94
  if (message.role === "user") return { ...current, messages: [message] };
@@ -121,7 +128,7 @@ function buildLocalCursorProviderTurnLifecycle(
121
128
  async function prepareCursorCloudProviderTurn(
122
129
  prepareParams: PrepareCursorProviderTurnContext,
123
130
  ): Promise<CloudCursorProviderTurnPrepareResult> {
124
- const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled } = prepareParams;
131
+ const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled, agents, customSubagentNames } = prepareParams;
125
132
  const { model, context, options } = params;
126
133
 
127
134
  let restoreCursorSdkOutputFilter: (() => void) | undefined;
@@ -146,16 +153,16 @@ async function prepareCursorCloudProviderTurn(
146
153
 
147
154
  const { Agent } = await loadCursorSdk();
148
155
  restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
156
+ const promptContext = buildCursorCloudPromptContext(context, resolvedConfig.cloud.contextHandoff.value, params.request.nativeSourceRoles);
157
+ const nativeSourceRoles = params.request.nativeSourceRoles;
149
158
  const promptOptions = {
150
159
  ...getCursorPromptOptions(model),
160
+ nativeSourceRoles: nativeSourceRoles?.slice(nativeSourceRoles.length - getCursorConversationMessages(promptContext).length),
151
161
  agentMode,
152
162
  includePiBridgeGuidance: false,
153
163
  includePiAskQuestionGuidance: false,
154
164
  };
155
- const prompt = buildCursorPrompt(
156
- buildCursorCloudPromptContext(context, resolvedConfig.cloud.contextHandoff.value),
157
- promptOptions,
158
- );
165
+ const prompt = buildCursorPrompt(promptContext, promptOptions);
159
166
  const promptInputTokens = estimateCursorPromptTokens(prompt, promptOptions);
160
167
  const agent = await suppressCursorSdkOutput(() =>
161
168
  Agent.create(buildCursorCloudAgentOptions({
@@ -164,6 +171,7 @@ async function prepareCursorCloudProviderTurn(
164
171
  agentMode,
165
172
  resolvedConfig,
166
173
  name: params.scope.sessionName,
174
+ agents,
167
175
  })),
168
176
  );
169
177
  cloudAgentForCleanup = agent;
@@ -201,6 +209,7 @@ async function prepareCursorCloudProviderTurn(
201
209
  promptOptions,
202
210
  agentMode,
203
211
  localForce: false,
212
+ ...(customSubagentNames ? { customSubagentNames } : {}),
204
213
  });
205
214
 
206
215
  completed = true;
@@ -243,7 +252,7 @@ async function prepareCursorCloudProviderTurn(
243
252
  async function prepareCursorLocalProviderTurn(
244
253
  prepareParams: PrepareCursorProviderTurnContext,
245
254
  ): Promise<LocalCursorProviderTurnPrepareResult> {
246
- const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled } = prepareParams;
255
+ const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled, agents, customSubagentNames } = prepareParams;
247
256
  const { model, context, options } = params;
248
257
 
249
258
  let restoreCursorSdkOutputFilter: (() => void) | undefined;
@@ -279,7 +288,9 @@ async function prepareCursorLocalProviderTurn(
279
288
  modelSelection: selection,
280
289
  settingSources,
281
290
  localSafety,
291
+ agents,
282
292
  localResume: resolvedConfig.local.resume.value,
293
+ storeRoot: resolvedConfig.local.storeRoot.value,
283
294
  useHttp1ForAgent,
284
295
  debugRecorder: sdkEventDebug,
285
296
  onBridgeToolRequest: (request: CursorPiBridgeToolRequest) => {
@@ -301,9 +312,10 @@ async function prepareCursorLocalProviderTurn(
301
312
  const buildPromptOptions = (plan: ReturnType<typeof planCursorSessionSend>) => {
302
313
  const promptOptions = {
303
314
  ...getCursorPromptOptions(model),
315
+ nativeSourceRoles: params.request.nativeSourceRoles,
304
316
  agentMode,
305
317
  includePiBridgeGuidance,
306
- includePiAskQuestionGuidance: bridgeToolNames.has("pi__cursor_ask_question"),
318
+ includePiAskQuestionGuidance: false,
307
319
  };
308
320
  if (plan.mode !== "bootstrap" || !resolveCursorToolManifestEnabled()) {
309
321
  return promptOptions;
@@ -317,7 +329,7 @@ async function prepareCursorLocalProviderTurn(
317
329
  }),
318
330
  };
319
331
  };
320
- let sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context);
332
+ let sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context, params.request.nativeSourceRoles);
321
333
  if (sessionAgentLease.created && sessionAgentLease.resumed && sendPlan.mode === "incremental") {
322
334
  sendPlan = { mode: "bootstrap", resetAgent: false, reason: "process_resume" };
323
335
  }
@@ -329,7 +341,7 @@ async function prepareCursorLocalProviderTurn(
329
341
  sessionAgentScopeKey = sessionAgentLease.scopeKey;
330
342
  bridgeToolNames = new Set(sessionAgentLease.bridgeRun?.snapshot.tools.map((tool) => tool.mcpToolName) ?? []);
331
343
  includePiBridgeGuidance = bridgeToolNames.size > 0;
332
- sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context);
344
+ sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context, params.request.nativeSourceRoles);
333
345
  promptOptions = buildPromptOptions(sendPlan);
334
346
  prompt = buildCursorSessionSendPrompt(context, promptOptions, sendPlan);
335
347
  }
@@ -365,6 +377,7 @@ async function prepareCursorLocalProviderTurn(
365
377
  activeToolNames: activeToolNames ? [...activeToolNames] : [],
366
378
  sessionAgentScopeKey,
367
379
  bridgeRunId: bridgeRun?.id,
380
+ ...(customSubagentNames ? { customSubagentNames } : {}),
368
381
  });
369
382
  const nativeReplayId = createCursorNativeReplayId();
370
383
  const textDeltas: string[] = [];
@@ -461,7 +474,9 @@ export async function prepareCursorProviderTurn(
461
474
  return prepareCursorSummaryProviderTurn(prepareParams, selection);
462
475
  }
463
476
  const agentMode = getCursorProviderAgentModeOrThrow(params.scope.scopeKey);
464
- const context: PrepareCursorProviderTurnContext = { ...prepareParams, agentMode, selection, fastEnabled };
477
+ const agents = buildCursorCustomSubagentDefinitions(resolvedConfig.subagents.value);
478
+ const customSubagentNames = agents ? Object.keys(agents) : undefined;
479
+ const context: PrepareCursorProviderTurnContext = { ...prepareParams, agentMode, selection, fastEnabled, agents, customSubagentNames };
465
480
 
466
481
  return resolvedConfig.runtime.value === "cloud"
467
482
  ? prepareCursorCloudProviderTurn(context)
@@ -40,7 +40,7 @@ export async function prepareCursorSummaryProviderTurn(
40
40
  configureCursorSdkHttp1(sdk, resolvedConfig.local.useHttp1ForAgent);
41
41
  restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
42
42
  sessionStore = (await openCursorSessionStoreForScope({
43
- cwd, scopeKey: params.scope.scopeKey, persistent: false, hasResumeHandle: false,
43
+ cwd, scopeKey: params.scope.persistentScopeKey ?? params.scope.scopeKey, persistent: false,
44
44
  })).sessionStore;
45
45
  throwIfAborted();
46
46
  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
 
3
4
  export type CursorToolDisplaySource = "started" | "fallback" | "transcript";
@@ -53,12 +54,12 @@ export class CursorToolCompletionLedger {
53
54
  return stepId;
54
55
  }
55
56
  const fingerprint = getStartedToolCallFingerprint(toolCall);
56
- for (const [callId, startedToolCall] of this.startedToolCalls) {
57
- if (getStartedToolCallFingerprint(startedToolCall) !== fingerprint) continue;
58
- this.clearStartedToolCall(callId);
59
- return callId;
60
- }
61
- return undefined;
57
+ const matches = [...this.startedToolCalls].filter(([, started]) => getStartedToolCallFingerprint(started) === fingerprint);
58
+ // Identical concurrent shells cannot be joined safely without a matching ID.
59
+ if (normalizeCursorToolName(getToolName(toolCall)) === "shell" && matches.length !== 1) return undefined;
60
+ const callId = matches[0]?.[0];
61
+ if (callId !== undefined) this.clearStartedToolCall(callId);
62
+ return callId;
62
63
  }
63
64
 
64
65
  recordCompletedIdentity(identity: string): void {
@@ -121,5 +122,9 @@ export function getToolFingerprint(value: unknown): string {
121
122
  }
122
123
 
123
124
  export function getStartedToolCallFingerprint(toolCall: unknown): string {
124
- return getToolFingerprint({ toolName: getToolName(toolCall), args: getToolArgs(toolCall) });
125
+ const name = getToolName(toolCall);
126
+ // Accept legacy shell aliases; this does not establish that the SDK emits alias-changing pairs.
127
+ // Keep exact argument matching; assistant text alone is not completion proof.
128
+ const toolName = normalizeCursorToolName(name) === "shell" ? "shell" : name;
129
+ return getToolFingerprint({ toolName, args: getToolArgs(toolCall) });
125
130
  }
@@ -29,6 +29,7 @@ import type { CursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
29
29
  import type { CursorRequestProvenance } from "./cursor-request-provenance.js";
30
30
  import type { CursorUsageRecorder } from "./cursor-usage-ledger.js";
31
31
  import { runExclusiveCursorSessionTurn, __testUtils as cursorSessionTurnQueueTestUtils } from "./cursor-session-turn-queue.js";
32
+ import { withCursorSdkOutputNoticeHandler, type CursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
32
33
 
33
34
  function makeInitialMessage(model: Model<Api>): AssistantMessage {
34
35
  return {
@@ -57,6 +58,7 @@ export interface CursorProviderOwnership {
57
58
  recordCloudLifecycle: CursorCloudLifecycleRecorder;
58
59
  request: CursorRequestProvenance;
59
60
  usageRecorder: CursorUsageRecorder;
61
+ reportSdkNotice?: CursorSdkOutputNoticeHandler;
60
62
  }
61
63
 
62
64
  export function streamCursor(
@@ -92,7 +94,7 @@ export function streamCursor(
92
94
  stream.push({ type: "start", partial });
93
95
  await runExclusiveCursorSessionTurn(
94
96
  scope.scopeKey,
95
- () => runner.run(installCursorSdkProcessErrorGuard()),
97
+ () => withCursorSdkOutputNoticeHandler(ownership.reportSdkNotice, () => runner.run(installCursorSdkProcessErrorGuard())),
96
98
  options?.signal,
97
99
  );
98
100
  } catch (error) {
@@ -11,7 +11,7 @@ export const CURSOR_ASK_QUESTION_TOOL_NAME = "cursor_ask_question";
11
11
  export const CURSOR_ASK_QUESTION_ENV = "PI_CURSOR_ASK_QUESTION";
12
12
 
13
13
  export function resolveCursorAskQuestionEnabled(env: Record<string, string | undefined> = process.env): boolean {
14
- return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], true);
14
+ return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], false);
15
15
  }
16
16
 
17
17
  /** Package-namespaced event while `cursor_ask_question` awaits pi UI input. */
@@ -216,13 +216,13 @@ export function registerCursorQuestionTool(pi: CursorQuestionToolExtensionApi):
216
216
  name: CURSOR_ASK_QUESTION_TOOL_NAME,
217
217
  label: "Cursor question",
218
218
  description:
219
- "Ask the user a clarifying question from Cursor. Use when user preferences materially affect the next step; provide options when possible.",
220
- promptSnippet: "Ask the user a clarifying question through pi UI when material choices affect Cursor's next step",
219
+ "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.",
220
+ promptSnippet: "Do not prompt the user through cursor_ask_question unless they asked to be asked",
221
221
  executionMode: "sequential",
222
222
  parameters: CursorAskQuestionParamsSchema,
223
223
  promptGuidelines: [
224
- "Use cursor_ask_question only when running a Cursor model and user input would materially change the plan, scope, platform, or implementation path.",
225
- "Prefer cursor_ask_question with 2-4 concrete options instead of guessing when Cursor plan mode needs user choices.",
224
+ "Do not call cursor_ask_question unless the user explicitly asked to be prompted or to choose among options.",
225
+ "If this tool is available, prefer a reasonable default and state the assumption instead of blocking on a questionnaire.",
226
226
  ],
227
227
  async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
228
228
  const questions = normalizeQuestions(params as CursorAskQuestionParams);
@@ -5,6 +5,8 @@ import type { Api, Context, Model } from "@earendil-works/pi-ai";
5
5
  export interface CursorRequestProvenance {
6
6
  readonly purpose: "normal" | "compaction" | "tree";
7
7
  readonly occupancyFloor?: number;
8
+ /** Canonical native source roles in converted conversation order, only for an equivalent request. */
9
+ readonly nativeSourceRoles?: readonly string[];
8
10
  }
9
11
 
10
12
  interface Measurement {
@@ -14,10 +16,11 @@ interface Measurement {
14
16
  readonly tokens: number;
15
17
  }
16
18
 
17
- /** Receipt data contains hashes and scalars only, never conversation text. */
19
+ /** Receipt data contains hashes and source-role/accounting scalars only, never conversation text. */
18
20
  export interface CursorRequestProjectionSnapshot {
19
21
  readonly digest: string;
20
22
  readonly measurements: readonly Measurement[];
23
+ readonly nativeSourceRoles: readonly string[];
21
24
  }
22
25
 
23
26
  function projectionDigest(messages: readonly unknown[]): string {
@@ -49,7 +52,13 @@ export function captureCursorRequestProjection(manager: ExtensionContext["sessio
49
52
  measurements.push(Object.freeze({ api: message.api, provider: message.provider, model: message.model, tokens }));
50
53
  }
51
54
  }
52
- return Object.freeze({ digest: projectionDigest(convertToLlm(projection.messages)), measurements: Object.freeze(measurements) });
55
+ const nativeSourceRoles = projection.messages.flatMap((message) =>
56
+ message.role === "system" ? [] : convertToLlm([message]).map(() => message.role));
57
+ return Object.freeze({
58
+ digest: projectionDigest(convertToLlm(projection.messages)),
59
+ measurements: Object.freeze(measurements),
60
+ nativeSourceRoles: Object.freeze(nativeSourceRoles),
61
+ });
53
62
  }
54
63
 
55
64
  export function resolveCursorRequestProvenance(
@@ -58,7 +67,13 @@ export function resolveCursorRequestProvenance(
58
67
  context: Context,
59
68
  purpose: CursorRequestProvenance["purpose"],
60
69
  ): CursorRequestProvenance {
70
+ // ponytail: canonical native origin only. Unmatched transforms stay conservative;
71
+ // upgrade if Pi exposes final request-bound source provenance.
61
72
  if (purpose !== "normal" || snapshot.digest !== projectionDigest(context.messages)) return Object.freeze({ purpose });
62
73
  const measurement = snapshot.measurements.findLast((item) => item.api === model.api && item.provider === model.provider && item.model === model.id && item.tokens <= model.contextWindow);
63
- return Object.freeze({ purpose, ...(measurement ? { occupancyFloor: measurement.tokens } : {}) });
74
+ return Object.freeze({
75
+ purpose,
76
+ nativeSourceRoles: snapshot.nativeSourceRoles,
77
+ ...(measurement ? { occupancyFloor: measurement.tokens } : {}),
78
+ });
64
79
  }
@@ -1,7 +1,9 @@
1
1
  export {
2
2
  CURSOR_SDK_STARTUP_NOISE_PATTERNS,
3
+ withCursorSdkOutputNoticeHandler,
3
4
  installCursorSdkOutputFilter,
4
5
  isCursorSdkOutputSuppressed,
5
6
  isCursorSdkStartupNoise,
6
7
  suppressCursorSdkOutput,
7
8
  } from "../shared/cursor-sdk-output-filter.mjs";
9
+ export type { CursorSdkCapabilityNotice, CursorSdkOutputNoticeHandler } from "../shared/cursor-sdk-output-filter.mjs";
@@ -40,7 +40,7 @@ function hasActiveAbortSuppression(): boolean {
40
40
  }
41
41
 
42
42
  function isCursorProvenance(source: string): boolean {
43
- return source === "cursor-sdk-stack" || source === "cursor-extension-connect-stack" || source === "cursor-backend-details";
43
+ return source === "cursor-sdk-stack" || source === "cursor-backend-details";
44
44
  }
45
45
 
46
46
  function isCursorSdkWriteIterableClosedError(error: unknown): boolean {
@@ -83,7 +83,6 @@ function shouldSuppressProcessError(event: string | symbol, args: readonly unkno
83
83
  if (!classification) return false;
84
84
  if (classification.kind === "abort") return hasActiveAbortSuppression();
85
85
  if (activeProviderTurns.size === 0) return false;
86
- if (classification.kind === "network") return isCursorProvenance(classification.source) || classification.source === "connect-node-stack";
87
86
  return isCursorProvenance(classification.source);
88
87
  }
89
88