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
@@ -50,9 +50,63 @@ If resync runs but `context.tools` is still stale (e.g. only `read` listed), the
50
50
 
51
51
  ## Stock/transcript provider contract
52
52
 
53
- `test/cursor-provider-pi-context.test.ts` drives real `ModelRuntime` / `ModelRegistry` requests into `streamCursor`, with only Cursor SDK execution mocked. Run it against each supported host with all Pi peer imports pinned to that host (including nested native imports); a top-level package version alone is not resolution evidence. Cover official Pi 0.87.1, official latest, and current `fitchmultz/pi` main. The exact development Pi cohort is 0.99.1, with host TypeBox 1.3.27.
53
+ `test/cursor-provider-pi-context.test.ts` drives real `ModelRuntime` / `ModelRegistry` requests into `streamCursor`, with only Cursor SDK execution mocked. Run it against each supported host with all Pi peer imports pinned to that host (including nested native imports); a top-level package version alone is not resolution evidence. Cover official Pi 0.87.1, official latest, and current `fitchmultz/pi` main. The direct development Pi packages are locked 1.0.4 snapshots, not qualification targets; resolve latest stable official Pi and current `fitchmultz/pi` main once per workflow run. Their actual nested resolution is recorded with each check, including host TypeBox 1.3.27.
54
54
 
55
- The test covers bootstrap/incremental prompts, empty-vs-absent request tools, native replay/drain, cloud fresh/bootstrap selection, and actual host prompt serialization for context files and skills. `test/native-cursor-flow.test.mjs` additionally exercises the compiled extension through the real loader and registered Cursor provider, substituting only the external SDK transport/storage. It verifies actual bridge tool execution, replay without file access, persisted usage/lineage, tree, compaction, queued steering, abort and reload/disposal. Explicit `tools` is now an allowlist, not merely an initial active set; use `defaultTools` for a native fixture that allows replay wrappers to activate. It is offline contract evidence. Add live proof only for changed behavior that still needs real-service evidence under the cost policy above; do not rerun unchanged live lanes or infer full live coverage from offline tests.
55
+ The test covers bootstrap/incremental prompts, empty-vs-absent request tools, native replay/drain, cloud fresh/bootstrap selection, and actual host prompt serialization for context files and skills. `test/native-cursor-flow.test.mjs` additionally exercises the compiled extension through the real loader and registered Cursor provider, substituting only the external SDK transport/storage. It verifies actual bridge tool execution, pending-work idle/abort/shutdown/deadline ownership, replay without file access, persisted usage/lineage, tree, compaction, queued steering, abort and reload/disposal. `test/native-cursor-prompt.test.mjs` owns genuine native input, hidden notices, required-budget input, current attachments, custom-only continuation, equivalent conversion, payload/order-changing rejection, and GitHub comment soft guidance across bootstrap/incremental/custom-only sends. `test/native-cursor-ownership.test.mjs` owns concurrent-session contracts, including independently reopened managers for the same file, pending bridge survival across sibling reload/tree/shutdown, durable-key stability and atomic live-handle exclusion. These owners use `test/helpers/native-cursor-harness.mjs` and run in the explicit `check:compat` list and manual official-host compatibility route; the native-platform Vitest job is not execution evidence for these Node test owners. Explicit `tools` is now an allowlist, not merely an initial active set; use `defaultTools` for a native fixture that allows replay wrappers to activate. `test/native-provider.test.mjs` additionally verifies canonical `SessionManager.appendContextEdit()` plus `refreshContext()`, unchanged raw history, and conversation filtering that preserves system instructions, the current tool declaration, and explicit tool removal (the focused native slice from #271). It is offline contract evidence. Add live proof only for changed behavior that still needs real-service evidence under the cost policy above; do not rerun unchanged live lanes or infer full live coverage from offline tests.
56
+
57
+ ## Installed SDK vs native host evidence
58
+
59
+ The native harness substitutes external Cursor SDK transport/storage. It qualifies Pi ownership, scheduling and persisted-session behavior, not real SDK request-time linking. `test/cursor-sdk-lazy-import.test.ts` separately drives public installed `Agent.create()` → `send()` → `run.wait()` with `JsonlLocalAgentStore`, an empty credential environment/private HOME, and pre-import Node network/process guards. The positive case reaches exactly one blocked key-exchange fetch; the negative case denies an SDK module only after creation and fails before network. This protects first-send linking beyond a successful static import. The guards are public Node API interception, not an OS sandbox, and neither case qualifies authenticated gRPC, compiled Pi or the original Windows embedded hosts.
60
+
61
+ For missing exports, inspect resolution **from the failing importer**, not a root-level import. The installed SDK 1.0.36 nested Connect 1.7.0 / Protobuf 1.10.0 graph links; forcing that import to root Protobuf 2.16.0 reproduces `protoBase64`'s absence. This establishes a mechanism, not #233's unnamed host mapping. SDK-declared ranges, installed dependency versions and vendored transport versions are distinct facts.
62
+
63
+ An installed-package research probe can isolate a mechanism but cannot certify the public runtime. Exact SDK 1.0.23 source already has settings-selected hook loading, config leases, and Shell/ShellStream `updated_input.command` rewriting. Its direct hook-payload transport depends on `hooks_stdin_transport` (false by default or if initialization fails); false still delivers JSON through a POSIX heredoc or Windows PowerShell here-string, not missing hooks or missing stdin payload. SDK 1.0.36 always selects the direct transport mode. These are source endpoints, not a verified change date or rtk repair. The retained SDK 1.0.36 Shell-hook canary used private lexical bindings and a permissive approval collaborator: it read user hooks, passed the invocation ID, applied `updated_input.command`, and observed rewritten file output, with both native parsing and `parsingFailed`. It is not execution evidence for SDK 1.0.23, Pi/rtk integration or security-policy enforcement and must not become production integration. Replay arguments may precede rewriting; require original input, hook decision and actual executed command for the same invocation before diagnosing #173. The parser-warning branch does not establish the emitter or SIGTERM sender in #339.
64
+
65
+ For #247, exact SDK 1.0.27 source caches the exchanged bearer until invalidation, without expiry-based refresh; SDK 1.0.36 adds JWT-aware refresh, a 30-minute fallback when expiry cannot be parsed, and raw-Unauthenticated stream invalidation without interceptor resend. These source endpoints establish neither a change date, backend TTL, the original failure cause nor service recovery. SDK 1.0.27 already distinguishes classified authentication errors from raw Connect retry, shares reference-counted executor leases, and limits `agent.reload()` to workspace reload—not an auth-reset API. Failed provider runs reset their owned pool, but disposing one agent need not dispose an executor leased elsewhere. Require the redacted error chain and agent/executor/run transitions around retry and reload; do not infer a safe resend or add a guessed TTL from sanitized text.
66
+
67
+ The integrity-verified [SDK 1.0.37 package](https://registry.npmjs.org/@cursor/sdk/-/sdk-1.0.37.tgz) source comparison retains those SDK 1.0.36 bearer, executor-lease, workspace-reload, Shell/ShellStream hook-rewrite and parser-warning mechanisms. Public `index.d.ts`, `options.d.ts` and `sdk-config.d.ts` are byte-identical: both commit/PR attribution controls remain absent, with no new auth-reset, hook-transport, MCP timeout/readiness or local GUI option. LOCAL custom-subagent conversion remains ID/inherit-only; inspected SQLite/checkpoint/default-root factories retain the same layouts and MD5-to-SHA256 migration. This comparison establishes bounded source equivalence, not executed SDK 1.0.37 hook-canary, SQLite-migration or platform qualification. Keep the retained SDK 1.0.36 canary and 2026-10-06 45-model catalog attributed to their actual version.
68
+
69
+ A subsequent authenticated SDK 1.0.37 catalog-only refresh on 2026-10-07 returned 46 models and regenerated `src/cursor-fallback-models.generated.ts`, adding Claude Haiku 5.5 (`claude-haiku-5-5`) while preserving all 45 prior records. Its 20 variants expose `thinking=false|true`, `context=300k|1m` and `reasoning_effort=low|medium|high|xhigh|max`, with defaults `true`, `1m` and `high`. No checkpoint input was supplied: all 33 bundled checkpoint-derived entries were retained unchanged. This is catalog metadata proof only; it started no Agent/model turn or Cloud run and does not qualify hook execution, effective checkpoint limits, SQLite migration or native/platform behavior.
70
+
71
+ SDK 1.0.37 does materially change its vendored transport/retry source: HTTP/2 ping verification gains bounded completion and listener cleanup, HTTP/1 and HTTP/2 response iteration awaits the iterator directly while preserving already-rejected sentinel errors, and local retry classification adds `UND_ERR_SOCKET` plus failure-kind budget selection. SDK-declared external ranges are unchanged; neither those ranges nor a new vendored patch identity proves the resolved host graph or service recovery. Requalify installed-source transport and first-send contracts against the actual package; none of this establishes #247's original auth cause, #339's signal sender, #173's rtk behavior, #233's Windows importer graph or #206's readiness.
72
+
73
+ The 60-second MCP protocol default and lack of a public timeout option remain. SDK 1.0.37's internal `setToolCallRequestOptions`, `setToolCallOutputSchemaPassthrough` and `setListingDeadline` each occur only as definitions in the inspected ESM JavaScript, with no invocation found. They are not supported public setters or proof of readiness; preserve the extension's verified timeout compatibility path rather than adding private patches. The new public `computerUse` output variant uses the existing bounded generic replay fallback, not dedicated action/screenshot rendering or a new local execution option; see the [canonical replay matrix](./cursor-native-tool-replay.md#sdk-tooltype-replay-matrix).
74
+
75
+ ## Maintainer-only offline proof retention
76
+
77
+ Native SQLite fixtures should open the public `SqliteLocalAgentStore` from `@cursor/sdk/sqlite` with an explicit `stateRoot` under their temporary directory, pass it as `localStore` to `createAgentPlatform`, and await `dispose()` in `finally` before removing that directory. `scopedWorkspaceRef` filters agents; it does not relocate storage. Assert the owned `index.db` exists to guard isolation. A fresh missing-agent `checkpointStore.loadLatest()` returning `null` checks the lookup boundary, not per-agent checkpoint database I/O; see `test/cursor-sdk-lazy-import.test.ts`.
78
+
79
+ Two existing test flags retain raw proof in a **fresh private** directory outside the repository (or a gitignored scratch directory):
80
+
81
+ - `PI_CURSOR_TEST_EVIDENCE_DIR` retains native SessionManager JSONL with run/metadata/options sidecars, prompt payloads/roles/images, accepted catalog bytes, terminal/late usage facts and byte-preserving journals, and custom-agent resume proof.
82
+ - `PI_CURSOR_BOOTSTRAP_PROOF_DIR` retains installed SDK output-filter captures as `sdk-capture-{plain,ansi}.json`. Run `test/cursor-sdk-output-filter.test.ts` **before** `test/native-cursor-flow.test.mjs`: the latter consumes `sdk-capture-ansi.json` for its receipt/deferred-wait diagnostic checks. Do not invent capture payloads or reuse an old sealed run directory.
83
+
84
+ The lightweight `test/helpers/raw-test-evidence.mjs` owns only directory/file writes. Payload construction and explicit flag guards stay with each owning test; unset flags perform no evidence I/O. Existing filenames, JSON fields and raw JSONL/journal/Buffer bytes are retained, not converted into a uniform schema. Writes overwrite the same filename within an owned run.
85
+
86
+ For an installed development checkout, this example builds and runs only the offline owners, with Node 24+ and no inherited credentials/profile/host selectors:
87
+
88
+ ```bash
89
+ NODE24="$(command -v node)" # must resolve to Node 24+
90
+ PROOF="$(mktemp -d "${TMPDIR:-/tmp}/cursor-offline-proof.XXXXXX")"
91
+ chmod 700 "$PROOF"
92
+ mkdir -p "$PROOF/home" "$PROOF/agent" "$PROOF/tmp" "$PROOF/xdg"
93
+ offline() {
94
+ env -i PATH="$(dirname "$NODE24"):/usr/bin:/bin" \
95
+ HOME="$PROOF/home" USERPROFILE="$PROOF/home" XDG_CONFIG_HOME="$PROOF/xdg" \
96
+ PI_CODING_AGENT_DIR="$PROOF/agent" TMPDIR="$PROOF/tmp" \
97
+ PI_OFFLINE=1 PI_TELEMETRY=0 PI_SKIP_VERSION_CHECK=1 PI_CURSOR_SETTING_SOURCES=none \
98
+ PI_CURSOR_TEST_EVIDENCE_DIR="$PROOF/sessions" \
99
+ PI_CURSOR_BOOTSTRAP_PROOF_DIR="$PROOF/bootstrap" "$NODE24" "$@"
100
+ }
101
+ offline scripts/build.mjs
102
+ offline node_modules/vitest/vitest.mjs run test/cursor-sdk-output-filter.test.ts \
103
+ test/cursor-provider-stream-usage.test.ts test/cursor-provider-replay-live-run.test.ts \
104
+ test/cursor-session-agent-local-resume.test.ts
105
+ offline --test test/native-provider.test.mjs test/native-cursor-flow.test.mjs \
106
+ test/native-cursor-prompt.test.mjs test/native-cursor-ownership.test.mjs
107
+ ```
108
+
109
+ These artifacts may include prompts, tool arguments/results, local paths and private session facts. Never print, commit or publish them; never supply real keys to this offline workflow. Inspect persisted joins and bytes privately, then retain or remove only your owned proof directory. Offline artifacts establish the tested local SDK/native contracts, **not** all-host/backend qualification or paid-service acceptance.
56
110
 
57
111
  ## Auth: use `auth.json`, not only env
58
112
 
@@ -184,7 +238,7 @@ For LOCAL summary isolation, inspect actual SDK create/send options and persiste
184
238
 
185
239
  `test/cursor-usage-ledger.test.ts` uses real public SessionManager custom entries and bounded filesystem journals. It protects restart, optional mirror failure, backward/equal snapshot clocks, revised/aggregate-only/large bills, linear compact-revision storage, unavailable-to-late observations, abandon without a billing fetch, late abort, owner/sibling switches, inherited cross-directory gaps, lost native claims, pricing tiers, torn-tail prefix export/native-fork recovery and malformed/symlink files. Export is a canonical view of facts and uncertainty, not an invented client-run billing join. A failed durable append must not advance recognized accounting.
186
240
 
187
- For supported official hosts without committing a repair, use `node scripts/ci-compatibility.mjs --working-tree --official-only --versions 0.87.1,0.99.1,1.0.2`. This hashes an isolated source snapshot, builds/packs it, tests package loading and runs real native session contracts. Keep matching host-peer resolution and exact source evidence; offline SDK transport substitution proves integration, not live service availability. See [context/accounting boundaries](./cursor-model-ux-spec.md#context-and-accounting-boundaries) for the operational ledger ceiling and public-API limits.
241
+ For supported official hosts without committing a repair, use `node scripts/ci-compatibility.mjs --working-tree --official-only --versions 0.87.1,0.99.1,1.0.3`. This hashes an isolated source snapshot, builds/packs it, tests package loading and runs real native session contracts. Keep matching host-peer resolution and exact source evidence; offline SDK transport substitution proves integration, not live service availability. See [context/accounting boundaries](./cursor-model-ux-spec.md#context-and-accounting-boundaries) for the operational ledger ceiling and public-API limits.
188
242
 
189
243
  ### False-positive edge case (2026-05-23)
190
244
 
@@ -220,7 +274,7 @@ Pass criteria:
220
274
 
221
275
  Run offline checks first, then reuse retained proof whose tested inputs are unchanged. If changed behavior still needs real-service proof, choose one existing meaningful check on a representative environment. Do not run every command below as a paid ladder; docs/metadata-only changes need zero paid runs.
222
276
 
223
- TypeScript 7 owns builds and type checks. `@typescript/typescript6` is dev-only for the AST architecture test because TypeScript 7 has no stable compiler API. Vitest 5 defaults `clearMocks` to `true`.
277
+ TypeScript 7 owns builds and type checks. Build and typecheck commands invoke `node_modules/typescript/bin/tsc` explicitly to avoid npm's shared `tsc` shim selecting a different compiler. `@typescript/typescript6` is dev-only for AST architecture and installed-SDK contract tests because TypeScript 7 has no stable compiler API. Vitest 5 defaults `clearMocks` to `true`.
224
278
 
225
279
  ```bash
226
280
  npm test
@@ -289,7 +343,7 @@ The script writes timestamped artifacts under `--out` (default `/tmp/pi-cursor-s
289
343
 
290
344
  Stdout prints artifact paths and summary counts only. Raw payloads stay on disk and may contain local paths, project text, tool args/results, or secrets — do not commit or share them.
291
345
 
292
- Hard repo rule: Cursor SDK behavior claims must come from the installed `@cursor/sdk` package and/or https://cursor.com/docs/sdk/typescript, not from memory or ad-hoc probes alone. Current validation targets Node 24+, exact `@cursor/sdk@1.0.32`, official Pi 0.87.1/latest, and current `fitchmultz/pi` main.
346
+ Hard repo rule: Cursor SDK behavior claims must come from the installed `@cursor/sdk` package and/or https://cursor.com/docs/sdk/typescript, not from memory or ad-hoc probes alone. Current validation targets Node 24+, exact `@cursor/sdk@1.0.37`, official Pi 0.87.1/latest, and current `fitchmultz/pi` main.
293
347
 
294
348
  ## Pi provider SDK event capture
295
349
 
@@ -380,7 +434,7 @@ Stderr output for these records requires `PI_CURSOR_SDK_EVENT_DEBUG_STDERR=1`. T
380
434
 
381
435
  **Symptom:** Assistant output lists tool invocations (for example `Tool call`, `Cursor activity`, `call cursor-replay-…`, `toolName`, `browser_navigate`) instead of pi tool execution cards/results.
382
436
 
383
- **What the screenshot in [#40](https://github.com/fitchmultz/pi-cursor-sdk/issues/40) shows:** Plain assistant text that mirrors pi's **prompt transcript format** for replay tool calls (`Tool call (Cursor activity, call cursor-replay-…): …` from `src/context.ts`) rather than a rendered pi `toolCall` card. That pattern usually means the Cursor model **narrated** a tool call as text; it is not proof that pi failed to emit `toolcall_start` / `toolUse`.
437
+ **What the screenshot in [#40](https://github.com/fitchmultz/pi-cursor-sdk/issues/40) shows:** Plain assistant text that mirrors the old prompt transcript format (`Tool call (Cursor activity, call cursor-replay-…): …`) rather than a rendered pi `toolCall` card. That pattern is narration, not proof that pi failed to emit `toolcall_start` / `toolUse`. Structured tool history now uses `Historical tool request/result/error` in `src/context.ts`; an unmatched request remains a request. Regression coverage retains arguments, IDs, errors, raw messages/fingerprints, prose/code fences, prompt paths and coherent estimates. The change removes an imitable template, not prior assistant text or the underlying model behavior in #257.
384
438
 
385
439
  **Do not close #40 as duplicate of #55 without session JSONL.** #55 surfaces scrubbed SDK run failures and abort causes in the TUI. #40 can occur with no error toast when the model prints tool metadata as assistant text, when replay is display-only but the user expected real execution, when stale native replay routing or plan-strip resync gaps produce `Tool * not found` errors (see **#52**), or when started SDK tools were discarded at run end (see **#52** maintainer debug and [Discarded incomplete SDK tool calls](#discarded-incomplete-sdk-tool-calls) above). A hard **process exit** from uncaught `ConnectError` / `ETIMEDOUT` is **#43**, not #40 text echo.
386
440
 
@@ -454,7 +508,7 @@ Then inspect the failing assistant turn in `$SMOKE_DIR/session/*.jsonl`:
454
508
  3. **`content` is only `type: "text"` and text contains `Tool call (` / `cursor-replay-` / serialized arg keys** — model text echo of prompt transcript format; not #55, not #52 stale routing. Compare with `buildCursorPrompt()` output in the prior turn.
455
509
  4. **No `toolCall` blocks, no error toast, user expected real execution** — check whether names are replay-only (`cursor-replay-*`) or Cursor-native MCP; replay never re-runs work ([replay doc](./cursor-native-tool-replay.md)).
456
510
  5. **`stopReason: "error"` or scrubbed `errorMessage`** — classify under **#55**; check whether incomplete started tools were discarded (`discardIncompleteStartedToolCalls()`). Discarded starts with no completion and no model text echo: see `coordinator-events.jsonl` phase `discarded-incomplete-started-tool-call` ([Discarded incomplete SDK tool calls](#discarded-incomplete-sdk-tool-calls) above); route broader stale/inactive replay gaps to **#52**.
457
- 6. **Bridge expected (`pi__*` in Cursor MCP)** — inspect stderr `[pi-cursor-sdk:bridge]` JSONL with `PI_CURSOR_PI_TOOL_BRIDGE_DEBUG=1` for pending/unresolved bridge requests.
511
+ 6. **Bridge expected (`pi__*` in Cursor MCP)** — inspect stderr `[pi-cursor-sdk:bridge]` JSONL with `PI_CURSOR_PI_TOOL_BRIDGE_DEBUG=1`. Exposure records are not connection proof; `mcp_initialized` is a validated server notification receipt, `mcp_tools_list` is catalog-handler output, and request records establish actual call handling. None proves model consumption or ongoing health. See [bridge diagnostic boundaries](./cursor-tool-surfaces.md#diagnosing-advertised-but-unused-bridge-tools).
458
512
 
459
513
  Quick structural scan (no secrets):
460
514
 
@@ -482,3 +536,5 @@ rg '"type": "toolCall"|Tool call \(Cursor|cursor-replay-' "$SMOKE_DIR/session"/*
482
536
  - `scripts/lib/` — maintainer plumbing (CLI arg parsing, secret-aware `fail()`, child-process shutdown, shell timeout/auth helpers). Re-exports `shared/` helpers so published smoke/debug scripts stay aligned with provider runtime (`test/maintainer-scripts-lib.test.ts`).
483
537
  - `test/helpers/pi-harness.ts` — canonical fake pi/extension harness (`createPiHarness`, shared model/context/event helpers)
484
538
  - `test/helpers/cursor-provider-harness.ts` — Cursor SDK provider mocks and stream helpers (re-exports pi-harness fixtures; `createNativeToolDisplayPiForTest` for native replay)
539
+
540
+ Compatibility campaign watchdogs must bound setup and suite phases separately. A Linux run passed all unit assertions in 153.52 seconds but exhausted the old combined 180-second build/verify/native command budget as native tests started; killing only npm left children alive while cleanup removed their workspace. A later Ubuntu run exhausted even the independent 180-second verification budget while tests were still passing; it produced no terminal suite summary, so eventual completion and success are unknown. The command helper now defaults build/native and other commands to 180 seconds, and exactly `npm` with arguments `["run", "verify"]` to 360 seconds; explicit caller timeouts, including zero, take precedence. The campaign retains independent phases, stops owned POSIX descendants on a watchdog error, and allows twenty minutes for the complete two-host job. Keep every individual case deadline/assertion unchanged; downstream ENOENT after workspace removal is teardown evidence, not a product regression.
@@ -19,7 +19,22 @@ Pi CLI tool toggles apply at the pi tool-registry boundary. `--no-tools`, `--too
19
19
  - **MCP `listTools`** (and pi's MCP catalog when present) lists **MCP servers only** — for example `pi_tools` with `pi__cursor_ask_question`. It does **not** enumerate Cursor SDK host tools such as `Read` or `Shell`.
20
20
  - **Bootstrap prompts** include a short **Cursor SDK tool boundary** block plus a compact **callable tool surfaces** manifest by default (disable manifest with `PI_CURSOR_TOOL_MANIFEST=0`). The manifest reminds the model that Cursor host/configured MCP tools are controlled by Cursor, while pi tool toggles only affect pi tools/bridge exposure; when bridge tools are exposed, it lists the current `pi__*` names. MCP `listTools` entries for bridged pi tools point back to the bootstrap prompt instead of repeating the full contract.
21
21
  - **Incremental prompts** omit the full boundary block but keep a short tail guard (including an explicit shell `cd` hint); the session agent retains prior bootstrap context. They also omit invariant Pi system instructions; a changed system prompt forces bootstrap with the new section.
22
- - **In-session debug:** `/cursor-tools` prints bridge enablement, manifest enablement, effective `PI_CURSOR_SETTING_SOURCES`, and the current callable-surface snapshot.
22
+ - **In-session debug:** `/cursor-tools` prints bridge/manifest enablement, effective `PI_CURSOR_SETTING_SOURCES`, and current-registry exposure eligibility, including the builtin-exposure setting. It is not a live-run catalog or health check.
23
+
24
+ ## Diagnosing advertised but unused bridge tools
25
+
26
+ Enable `PI_CURSOR_PI_TOOL_BRIDGE_DEBUG=1` before the turn. The existing scrubbed stderr records correlate observations by safe run ID:
27
+
28
+ | Record | What it establishes |
29
+ | --- | --- |
30
+ | `run_created` / `tools_exposed` | Run exposure and pi↔MCP name mapping, not connection |
31
+ | `mcp_initialized` | Server receipt of validated `notifications/initialized` |
32
+ | `mcp_tools_list` | Catalog-handler output after request validation, with `toolCount` |
33
+ | `request_queued` / `request_resolved` / `request_rejected` | Actual bridge call handling |
34
+
35
+ Initialization/catalog receipts are server observations, not Cursor-client identity, response delivery, model consumption or ongoing health. Absence does not explain why no request occurred. `/cursor-tools` reflects the registry now, not an earlier run's captured surface; exposure alone is not invocation proof. These diagnostics do not enumerate Cursor-configured MCP connections. Do not share logs where tool names are sensitive; endpoint credentials and raw args/results are excluded.
36
+
37
+ For an advertised-but-unused `pi__subagent`, first identify the active provider/version (especially with multiple Cursor providers installed), then compare the run's exposure, initialization/catalog and call records with persisted pi `toolCall`/`toolResult` rows. Bash-spawned Pi is not evidence of bridged `subagent` execution. The original Windows/two-provider report remains open in [#206](https://github.com/fitchmultz/pi-cursor-sdk/issues/206).
23
38
 
24
39
  ## Pi bridge vs Cursor native
25
40
 
@@ -30,11 +45,11 @@ Default behavior:
30
45
  - The pi bridge exposes **active pi tools** as `pi__*` MCP names when `PI_CURSOR_PI_TOOL_BRIDGE` is enabled (default on).
31
46
  - Overlapping pi builtins (`read`, `bash`, `write`, `edit`, `grep`, `find`, `ls`) are **hidden** from the bridge unless `PI_CURSOR_EXPOSE_BUILTIN_TOOLS=1`.
32
47
 
33
- `pi-cursor-sdk` registers `cursor_ask_question` for Cursor models when the bridge is on and `PI_CURSOR_ASK_QUESTION` is enabled (the default); Cursor sees `pi__cursor_ask_question`. The tool is sequential and emits `pi-cursor-sdk:ask-question:blocked` `{ active }` while awaiting UI input. Set `PI_CURSOR_ASK_QUESTION=0` to remove only this tool while preserving the rest of the bridge. Pending bridged calls use a local deadline capped by the effective MCP tool timeout; `PI_CURSOR_PI_BRIDGE_CALL_TIMEOUT_MS` can lower it. When pi has visible Agent Skills loaded, the extension also rewrites pi's skill catalog for Cursor and activates `cursor_activate_skill`; Cursor sees `pi__cursor_activate_skill` and should call it with a listed skill name before applying that skill. The activation result returns the full `SKILL.md`, the skill directory for relative paths, and a bounded list of bundled `scripts/`, `references/`, and `assets/` files without eagerly reading those resources.
48
+ `pi-cursor-sdk` registers `cursor_ask_question` for Cursor models when the bridge is on and `PI_CURSOR_ASK_QUESTION=1`; Cursor sees `pi__cursor_ask_question`. The tool is sequential and emits `pi-cursor-sdk:ask-question:blocked` `{ active }` while awaiting UI input. It is off by default so Cursor proceeds with a stated assumption instead of prompting. Pending bridged calls use a local deadline capped by the effective MCP tool timeout; `PI_CURSOR_PI_BRIDGE_CALL_TIMEOUT_MS` can lower it. When pi has visible Agent Skills loaded, the extension also rewrites pi's skill catalog for Cursor and activates `cursor_activate_skill`; Cursor sees `pi__cursor_activate_skill` and should call it with a listed skill name before applying that skill. The activation result returns the full `SKILL.md`, the skill directory for relative paths, and a bounded list of bundled `scripts/`, `references/`, and `assets/` files without eagerly reading those resources.
34
49
 
35
50
  ```bash
36
- # Disable only Cursor's interactive question tool
37
- PI_CURSOR_ASK_QUESTION=0 pi --model cursor/grok-4.6
51
+ # Enable Cursor's interactive question tool
52
+ PI_CURSOR_ASK_QUESTION=1 pi --model cursor/grok-4.6
38
53
 
39
54
  # Disable pi bridge entirely
40
55
  PI_CURSOR_PI_TOOL_BRIDGE=0 pi --model cursor/grok-4.6
@@ -5,20 +5,20 @@ Initially, Hono wasn't designed for Node.js, but with this adapter, you can now
5
5
 
6
6
  ## Benchmarks
7
7
 
8
- Hono is 4.1 times faster than Express.
8
+ Hono is 3.1 times faster than Express.
9
9
 
10
- Express:
10
+ Express v5:
11
11
 
12
12
  ```txt
13
13
  $ bombardier -d 10s --fasthttp http://localhost:3000/
14
14
 
15
15
  Statistics Avg Stdev Max
16
- Reqs/sec 20803.37 1713.06 24910.85
17
- Latency 6.01ms 5.21ms 451.37ms
16
+ Reqs/sec 24380.41 1409.74 26604.88
17
+ Latency 5.12ms 2.95ms 305.21ms
18
18
  HTTP codes:
19
- 1xx - 0, 2xx - 208131, 3xx - 0, 4xx - 0, 5xx - 0
19
+ 1xx - 0, 2xx - 243915, 3xx - 0, 4xx - 0, 5xx - 0
20
20
  others - 0
21
- Throughput: 5.75MB/s
21
+ Throughput: 6.98MB/s
22
22
  ```
23
23
 
24
24
  Hono + `@hono/node-server`:
@@ -27,12 +27,12 @@ Hono + `@hono/node-server`:
27
27
  $ bombardier -d 10s --fasthttp http://localhost:3000/
28
28
 
29
29
  Statistics Avg Stdev Max
30
- Reqs/sec 85405.51 7250.65 102658.51
31
- Latency 1.46ms 1.00ms 149.95ms
30
+ Reqs/sec 74428.96 3815.27 88228.32
31
+ Latency 1.68ms 621.25us 106.20ms
32
32
  HTTP codes:
33
- 1xx - 0, 2xx - 854120, 3xx - 0, 4xx - 0, 5xx - 0
33
+ 1xx - 0, 2xx - 744378, 3xx - 0, 4xx - 0, 5xx - 0
34
34
  others - 0
35
- Throughput: 18.49MB/s
35
+ Throughput: 16.82MB/s
36
36
  ```
37
37
 
38
38
  ## Requirements
@@ -226,6 +226,17 @@ Notice that `root` here is not relative to `src/index.ts`, rather to `my-hono-pr
226
226
 
227
227
  ### Options
228
228
 
229
+ #### `allowPercentInPath`
230
+
231
+ By default, `serveStatic` skips request paths that still contain `%` after routing. This prevents a second decoding step from serving a file under a different path than the one checked by route middleware. Set `allowPercentInPath: true` to keep the previous behavior when serving files whose names contain percent signs.
232
+
233
+ If you restrict access to only some paths under `root` (for example, `/static/admin/*`), enabling this option may let requests bypass those restrictions. Apply access control to the same route pattern as `serveStatic` (for example, `/static/*`), before the static middleware:
234
+
235
+ ```ts
236
+ app.use('/static/*', authMiddleware)
237
+ app.use('/static/*', serveStatic({ root: './static', allowPercentInPath: true }))
238
+ ```
239
+
229
240
  #### `rewriteRequestPath`
230
241
 
231
242
  If you want to serve files in `./.foojs` with the request path `/__foo/*`, you can write like the following.
@@ -15,7 +15,7 @@ const earlyHints = (options) => {
15
15
  const dest = c.req.header("Sec-Fetch-Dest");
16
16
  if (mode && mode !== "navigate" || dest && dest !== "document") return next();
17
17
  const env = c.env || {};
18
- const outgoing = (env.server ? env.server : env)?.outgoing;
18
+ const outgoing = ("server" in env ? env.server : env)?.outgoing;
19
19
  if (typeof outgoing?.writeEarlyHints !== "function") {
20
20
  if (!warned) {
21
21
  console.warn("Early Hints Middleware is not supported because writeEarlyHints is not defined.");
@@ -13,7 +13,7 @@ const earlyHints = (options) => {
13
13
  const dest = c.req.header("Sec-Fetch-Dest");
14
14
  if (mode && mode !== "navigate" || dest && dest !== "document") return next();
15
15
  const env = c.env || {};
16
- const outgoing = (env.server ? env.server : env)?.outgoing;
16
+ const outgoing = ("server" in env ? env.server : env)?.outgoing;
17
17
  if (typeof outgoing?.writeEarlyHints !== "function") {
18
18
  if (!warned) {
19
19
  console.warn("Early Hints Middleware is not supported because writeEarlyHints is not defined.");
@@ -868,7 +868,10 @@ const handleResponseError = (e, outgoing) => {
868
868
  if (err.code === "ERR_STREAM_PREMATURE_CLOSE") console.info("The user aborted a request.");
869
869
  else {
870
870
  console.error(e);
871
- if (!outgoing.headersSent) outgoing.writeHead(500, { "Content-Type": "text/plain" });
871
+ if (!outgoing.headersSent) {
872
+ if (outgoing instanceof node_http.ServerResponse) outgoing._contentLength = null;
873
+ outgoing.writeHead(500, { "Content-Type": "text/plain" });
874
+ }
872
875
  outgoing.end(`Error: ${err.message}`);
873
876
  outgoing.destroy(err);
874
877
  }
@@ -876,6 +879,21 @@ const handleResponseError = (e, outgoing) => {
876
879
  const flushHeaders = (outgoing) => {
877
880
  if ("flushHeaders" in outgoing && outgoing.writable) outgoing.flushHeaders();
878
881
  };
882
+ const trySetContentLength = (outgoing, status, length) => {
883
+ const http1 = outgoing;
884
+ if (http1._contentLength === null && http1._hasBody && http1.useChunkedEncodingByDefault && !http1._removedContLen && status >= 200 && status !== 204 && status !== 304 && !outgoing.hasHeader("content-length") && !outgoing.hasHeader("transfer-encoding") && !outgoing.hasHeader("trailer")) {
885
+ http1._contentLength = length;
886
+ return true;
887
+ }
888
+ return false;
889
+ };
890
+ const writeDefaultHeaders = (outgoing, status, length) => {
891
+ if (trySetContentLength(outgoing, status, length)) outgoing.writeHead(status, { "Content-Type": defaultContentType });
892
+ else outgoing.writeHead(status, {
893
+ "Content-Type": defaultContentType,
894
+ "Content-Length": length
895
+ });
896
+ };
879
897
  const responseViaCache = async (res, outgoing) => {
880
898
  let [status, body, header] = res[cacheKey];
881
899
  if (!header) {
@@ -883,22 +901,13 @@ const responseViaCache = async (res, outgoing) => {
883
901
  outgoing.writeHead(status);
884
902
  outgoing.end();
885
903
  } else if (typeof body === "string") {
886
- outgoing.writeHead(status, {
887
- "Content-Type": defaultContentType,
888
- "Content-Length": Buffer.byteLength(body)
889
- });
904
+ writeDefaultHeaders(outgoing, status, Buffer.byteLength(body));
890
905
  outgoing.end(body);
891
906
  } else if (body instanceof Uint8Array) {
892
- outgoing.writeHead(status, {
893
- "Content-Type": defaultContentType,
894
- "Content-Length": body.byteLength
895
- });
907
+ writeDefaultHeaders(outgoing, status, body.byteLength);
896
908
  outgoing.end(body);
897
909
  } else if (body instanceof Blob) {
898
- outgoing.writeHead(status, {
899
- "Content-Type": defaultContentType,
900
- "Content-Length": body.size
901
- });
910
+ writeDefaultHeaders(outgoing, status, body.size);
902
911
  outgoing.end(new Uint8Array(await body.arrayBuffer()));
903
912
  } else {
904
913
  outgoing.writeHead(status, { "Content-Type": defaultContentType });
@@ -909,6 +918,8 @@ const responseViaCache = async (res, outgoing) => {
909
918
  return;
910
919
  }
911
920
  let hasContentLength = false;
921
+ let plainHeaders = false;
922
+ let canAutoLength = true;
912
923
  if (header instanceof Headers) {
913
924
  hasContentLength = header.has("content-length");
914
925
  header = buildOutgoingHttpHeaders(header, body === null ? void 0 : defaultContentType);
@@ -916,14 +927,25 @@ const responseViaCache = async (res, outgoing) => {
916
927
  const headerObj = new Headers(header);
917
928
  hasContentLength = headerObj.has("content-length");
918
929
  header = buildOutgoingHttpHeaders(headerObj, body === null ? void 0 : defaultContentType);
919
- } else for (const key in header) if (key.length === 14 && key.toLowerCase() === "content-length") {
920
- hasContentLength = true;
921
- break;
930
+ } else {
931
+ plainHeaders = true;
932
+ for (const key in header) {
933
+ if (key.length === 14 && key.toLowerCase() === "content-length") {
934
+ hasContentLength = true;
935
+ break;
936
+ }
937
+ if (key.length === 17 && key.toLowerCase() === "transfer-encoding" || key.length === 7 && key.toLowerCase() === "trailer") canAutoLength = false;
938
+ }
922
939
  }
923
940
  if (!hasContentLength) {
924
- if (typeof body === "string") header["Content-Length"] = Buffer.byteLength(body);
925
- else if (body instanceof Uint8Array) header["Content-Length"] = body.byteLength;
926
- else if (body instanceof Blob) header["Content-Length"] = body.size;
941
+ let length;
942
+ if (typeof body === "string") length = Buffer.byteLength(body);
943
+ else if (body instanceof Uint8Array) length = body.byteLength;
944
+ else if (body instanceof Blob) length = body.size;
945
+ if (length !== void 0 && (!plainHeaders || !canAutoLength || !trySetContentLength(outgoing, status, length))) {
946
+ if (plainHeaders) header = { ...header };
947
+ header["Content-Length"] = length;
948
+ }
927
949
  }
928
950
  outgoing.writeHead(status, header);
929
951
  if (body == null) outgoing.end();
@@ -1,5 +1,5 @@
1
1
  import { t as X_ALREADY_SENT } from "./constants-BLSFu_RU.mjs";
2
- import { STATUS_CODES, createServer } from "node:http";
2
+ import { STATUS_CODES, ServerResponse, createServer } from "node:http";
3
3
  import { Http2ServerRequest, constants } from "node:http2";
4
4
  import { Readable } from "node:stream";
5
5
  import { defineWebSocketHelper } from "hono/ws";
@@ -867,7 +867,10 @@ const handleResponseError = (e, outgoing) => {
867
867
  if (err.code === "ERR_STREAM_PREMATURE_CLOSE") console.info("The user aborted a request.");
868
868
  else {
869
869
  console.error(e);
870
- if (!outgoing.headersSent) outgoing.writeHead(500, { "Content-Type": "text/plain" });
870
+ if (!outgoing.headersSent) {
871
+ if (outgoing instanceof ServerResponse) outgoing._contentLength = null;
872
+ outgoing.writeHead(500, { "Content-Type": "text/plain" });
873
+ }
871
874
  outgoing.end(`Error: ${err.message}`);
872
875
  outgoing.destroy(err);
873
876
  }
@@ -875,6 +878,21 @@ const handleResponseError = (e, outgoing) => {
875
878
  const flushHeaders = (outgoing) => {
876
879
  if ("flushHeaders" in outgoing && outgoing.writable) outgoing.flushHeaders();
877
880
  };
881
+ const trySetContentLength = (outgoing, status, length) => {
882
+ const http1 = outgoing;
883
+ if (http1._contentLength === null && http1._hasBody && http1.useChunkedEncodingByDefault && !http1._removedContLen && status >= 200 && status !== 204 && status !== 304 && !outgoing.hasHeader("content-length") && !outgoing.hasHeader("transfer-encoding") && !outgoing.hasHeader("trailer")) {
884
+ http1._contentLength = length;
885
+ return true;
886
+ }
887
+ return false;
888
+ };
889
+ const writeDefaultHeaders = (outgoing, status, length) => {
890
+ if (trySetContentLength(outgoing, status, length)) outgoing.writeHead(status, { "Content-Type": defaultContentType });
891
+ else outgoing.writeHead(status, {
892
+ "Content-Type": defaultContentType,
893
+ "Content-Length": length
894
+ });
895
+ };
878
896
  const responseViaCache = async (res, outgoing) => {
879
897
  let [status, body, header] = res[cacheKey];
880
898
  if (!header) {
@@ -882,22 +900,13 @@ const responseViaCache = async (res, outgoing) => {
882
900
  outgoing.writeHead(status);
883
901
  outgoing.end();
884
902
  } else if (typeof body === "string") {
885
- outgoing.writeHead(status, {
886
- "Content-Type": defaultContentType,
887
- "Content-Length": Buffer.byteLength(body)
888
- });
903
+ writeDefaultHeaders(outgoing, status, Buffer.byteLength(body));
889
904
  outgoing.end(body);
890
905
  } else if (body instanceof Uint8Array) {
891
- outgoing.writeHead(status, {
892
- "Content-Type": defaultContentType,
893
- "Content-Length": body.byteLength
894
- });
906
+ writeDefaultHeaders(outgoing, status, body.byteLength);
895
907
  outgoing.end(body);
896
908
  } else if (body instanceof Blob) {
897
- outgoing.writeHead(status, {
898
- "Content-Type": defaultContentType,
899
- "Content-Length": body.size
900
- });
909
+ writeDefaultHeaders(outgoing, status, body.size);
901
910
  outgoing.end(new Uint8Array(await body.arrayBuffer()));
902
911
  } else {
903
912
  outgoing.writeHead(status, { "Content-Type": defaultContentType });
@@ -908,6 +917,8 @@ const responseViaCache = async (res, outgoing) => {
908
917
  return;
909
918
  }
910
919
  let hasContentLength = false;
920
+ let plainHeaders = false;
921
+ let canAutoLength = true;
911
922
  if (header instanceof Headers) {
912
923
  hasContentLength = header.has("content-length");
913
924
  header = buildOutgoingHttpHeaders(header, body === null ? void 0 : defaultContentType);
@@ -915,14 +926,25 @@ const responseViaCache = async (res, outgoing) => {
915
926
  const headerObj = new Headers(header);
916
927
  hasContentLength = headerObj.has("content-length");
917
928
  header = buildOutgoingHttpHeaders(headerObj, body === null ? void 0 : defaultContentType);
918
- } else for (const key in header) if (key.length === 14 && key.toLowerCase() === "content-length") {
919
- hasContentLength = true;
920
- break;
929
+ } else {
930
+ plainHeaders = true;
931
+ for (const key in header) {
932
+ if (key.length === 14 && key.toLowerCase() === "content-length") {
933
+ hasContentLength = true;
934
+ break;
935
+ }
936
+ if (key.length === 17 && key.toLowerCase() === "transfer-encoding" || key.length === 7 && key.toLowerCase() === "trailer") canAutoLength = false;
937
+ }
921
938
  }
922
939
  if (!hasContentLength) {
923
- if (typeof body === "string") header["Content-Length"] = Buffer.byteLength(body);
924
- else if (body instanceof Uint8Array) header["Content-Length"] = body.byteLength;
925
- else if (body instanceof Blob) header["Content-Length"] = body.size;
940
+ let length;
941
+ if (typeof body === "string") length = Buffer.byteLength(body);
942
+ else if (body instanceof Uint8Array) length = body.byteLength;
943
+ else if (body instanceof Blob) length = body.size;
944
+ if (length !== void 0 && (!plainHeaders || !canAutoLength || !trySetContentLength(outgoing, status, length))) {
945
+ if (plainHeaders) header = { ...header };
946
+ header["Content-Length"] = length;
947
+ }
926
948
  }
927
949
  outgoing.writeHead(status, header);
928
950
  if (body == null) outgoing.end();
@@ -77,6 +77,7 @@ const serveStatic = (options = { root: "" }) => {
77
77
  let filename;
78
78
  if (optionPath) filename = optionPath;
79
79
  else try {
80
+ if (!options.allowPercentInPath && c.req.path.includes("%")) throw new Error();
80
81
  filename = tryDecodeURI(c.req.path);
81
82
  if (/(?:^|[\/\\])\.{1,2}(?:$|[\/\\])|[\/\\]{2,}|\\/.test(filename)) throw new Error();
82
83
  } catch {
@@ -8,7 +8,8 @@ type ServeStaticOptions<E extends Env = Env> = {
8
8
  root?: string;
9
9
  path?: string;
10
10
  index?: string;
11
- precompressed?: boolean;
11
+ precompressed?: boolean; /** Allow percent signs in the routed request path. Defaults to false. */
12
+ allowPercentInPath?: boolean;
12
13
  rewriteRequestPath?: (path: string, c: Context<E>) => string;
13
14
  onFound?: (path: string, c: Context<E>) => void | Promise<void>;
14
15
  onNotFound?: (path: string, c: Context<E>) => void | Promise<void>;
@@ -8,7 +8,8 @@ type ServeStaticOptions<E extends Env = Env> = {
8
8
  root?: string;
9
9
  path?: string;
10
10
  index?: string;
11
- precompressed?: boolean;
11
+ precompressed?: boolean; /** Allow percent signs in the routed request path. Defaults to false. */
12
+ allowPercentInPath?: boolean;
12
13
  rewriteRequestPath?: (path: string, c: Context<E>) => string;
13
14
  onFound?: (path: string, c: Context<E>) => void | Promise<void>;
14
15
  onNotFound?: (path: string, c: Context<E>) => void | Promise<void>;
@@ -76,6 +76,7 @@ const serveStatic = (options = { root: "" }) => {
76
76
  let filename;
77
77
  if (optionPath) filename = optionPath;
78
78
  else try {
79
+ if (!options.allowPercentInPath && c.req.path.includes("%")) throw new Error();
79
80
  filename = tryDecodeURI(c.req.path);
80
81
  if (/(?:^|[\/\\])\.{1,2}(?:$|[\/\\])|[\/\\]{2,}|\\/.test(filename)) throw new Error();
81
82
  } catch {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hono/node-server",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "Node.js Adapter for Hono",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",
@@ -100,7 +100,7 @@
100
100
  "@types/ws": "^8.18.1",
101
101
  "@whatwg-node/fetch": "^0.9.14",
102
102
  "eslint": "^9.10.0",
103
- "hono": "^4.12.8",
103
+ "hono": "^4.13.9",
104
104
  "np": "^11.2.1",
105
105
  "prettier": "^3.2.4",
106
106
  "publint": "^0.3.18",
@@ -119,6 +119,7 @@
119
119
  "postbuild": "publint",
120
120
  "prerelease": "pnpm run build && pnpm run test --run",
121
121
  "release": "np --no-publish",
122
+ "typecheck": "tsc --noEmit",
122
123
  "lint": "eslint src test",
123
124
  "lint:fix": "eslint src test --fix",
124
125
  "format": "prettier --check \"src/**/*.{js,ts}\" \"test/**/*.{js,ts}\"",
@@ -8368,6 +8368,7 @@ declare const OAuthTokensSchema: z.ZodObject<{
8368
8368
  expires_in: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
8369
8369
  scope: z.ZodOptional<z.ZodString>;
8370
8370
  refresh_token: z.ZodOptional<z.ZodString>;
8371
+ issuer: z.ZodCatch<z.ZodOptional<z.ZodString>>;
8371
8372
  }, z.core.$strip>;
8372
8373
  /**
8373
8374
  * RFC 8693 §2.2.1 Token Exchange response for ID-JAG tokens.
@@ -8426,6 +8427,7 @@ declare const OAuthClientInformationSchema: z.ZodObject<{
8426
8427
  client_secret: z.ZodOptional<z.ZodString>;
8427
8428
  client_id_issued_at: z.ZodOptional<z.ZodNumber>;
8428
8429
  client_secret_expires_at: z.ZodOptional<z.ZodNumber>;
8430
+ issuer: z.ZodCatch<z.ZodOptional<z.ZodString>>;
8429
8431
  }, z.core.$strip>;
8430
8432
  /**
8431
8433
  * RFC 7591 OAuth 2.0 Dynamic Client Registration full response (client information plus metadata)
@@ -8452,6 +8454,7 @@ declare const OAuthClientInformationFullSchema: z.ZodObject<{
8452
8454
  client_secret: z.ZodOptional<z.ZodString>;
8453
8455
  client_id_issued_at: z.ZodOptional<z.ZodNumber>;
8454
8456
  client_secret_expires_at: z.ZodOptional<z.ZodNumber>;
8457
+ issuer: z.ZodCatch<z.ZodOptional<z.ZodString>>;
8455
8458
  }, z.core.$strip>;
8456
8459
  /**
8457
8460
  * RFC 7591 OAuth 2.0 Dynamic Client Registration error response
@@ -8480,22 +8483,20 @@ type OAuthClientInformationMixed = OAuthClientInformation | OAuthClientInformati
8480
8483
  * {@linkcode OAuthTokens} as persisted by an `OAuthClientProvider`. Adds an
8481
8484
  * SDK-stamped authorization-server `issuer` identifier so stored tokens are
8482
8485
  * bound to the AS that issued them. The `issuer` field is **not** part of the
8483
- * RFC 6749 wire response and is intentionally absent from the wire-response
8484
- * schema; the client SDK writes it before calling `saveTokens`.
8486
+ * RFC 6749 wire response; the client SDK writes it before calling `saveTokens`.
8485
8487
  */
8486
8488
  type StoredOAuthTokens = OAuthTokens & {
8487
- issuer?: string;
8489
+ issuer?: string | undefined;
8488
8490
  };
8489
8491
  /**
8490
8492
  * {@linkcode OAuthClientInformationMixed} as persisted by an
8491
8493
  * `OAuthClientProvider`. Adds an SDK-stamped authorization-server `issuer`
8492
8494
  * identifier so stored client credentials are bound to the AS that issued them.
8493
- * The `issuer` field is **not** part of the RFC 7591 wire response and is
8494
- * intentionally absent from the wire-response schema; the client SDK writes it
8495
- * before calling `saveClientInformation`.
8495
+ * The `issuer` field is **not** part of the RFC 7591 wire response; the client SDK
8496
+ * writes it before calling `saveClientInformation`.
8496
8497
  */
8497
8498
  type StoredOAuthClientInformation = OAuthClientInformationMixed & {
8498
- issuer?: string;
8499
+ issuer?: string | undefined;
8499
8500
  };
8500
8501
  type OAuthClientRegistrationError = z.infer<typeof OAuthClientRegistrationErrorSchema>;
8501
8502
  type OAuthTokenRevocationRequest = z.infer<typeof OAuthTokenRevocationRequestSchema>;
@@ -8503,4 +8504,4 @@ type OAuthProtectedResourceMetadata = z.infer<typeof OAuthProtectedResourceMetad
8503
8504
  type AuthorizationServerMetadata = OAuthMetadata | OpenIdProviderDiscoveryMetadata;
8504
8505
  //#endregion
8505
8506
  export { ContentBlockSchema as $, ServerTasksCapabilitySchema as $n, ListTasksResultSchema as $t, StoredOAuthTokens as A, RequestMetaSchema as An, ToolUseContentSchema as Ar, InitializeRequestSchema as At, CancelTaskRequestSchema as B, ResourceUpdatedNotificationSchema as Bn, JSONRPCResultResponseSchema as Bt, OpenIdProviderDiscoveryMetadata as C, PromptReferenceSchema as Cn, TitledSingleSelectEnumSchemaSchema as Cr, GetTaskRequestSchema as Ct, OptionalSafeUrlSchema as D, ReadResourceResultSchema as Dn, ToolListChangedNotificationSchema as Dr, ImageContentSchema as Dt, OpenIdProviderMetadataSchema as E, ReadResourceRequestSchema as En, ToolExecutionSchema as Er, IconsSchema as Et, BlobResourceContentsSchema as F, ResourceRequestParamsSchema as Fn, JSONArray as Fr, JSONRPCErrorResponseSchema as Ft, ClientNotificationSchema as G, RootsListChangedNotificationSchema as Gn, ListPromptsResultSchema as Gt, CancelledNotificationParamsSchema as H, ResultSchema as Hn, LegacyTitledEnumSchemaSchema as Ht, BooleanSchemaSchema as I, ResourceSchema as In, JSONObject as Ir, JSONRPCMessageSchema as It, ClientTasksCapabilitySchema as J, SamplingMessageSchema as Jn, ListResourcesRequestSchema as Jt, ClientRequestSchema as K, SamplingContentSchema as Kn, ListResourceTemplatesRequestSchema as Kt, CallToolRequestParamsSchema as L, ResourceTemplateReferenceSchema as Ln, JSONValue as Lr, JSONRPCNotificationSchema as Lt, AudioContentSchema as M, ResourceContentsSchema as Mn, UnsubscribeRequestSchema as Mr, InitializedNotificationSchema as Mt, BaseMetadataSchema as N, ResourceLinkSchema as Nn, UntitledMultiSelectEnumSchemaSchema as Nr, JSONArraySchema as Nt, SafeUrlSchema as O, RelatedTaskMetadataSchema as On, ToolResultContentSchema as Or, ImplementationSchema as Ot, BaseRequestParamsSchema as P, ResourceListChangedNotificationSchema as Pn, UntitledSingleSelectEnumSchemaSchema as Pr, JSONObjectSchema as Pt, CompleteResultSchema as Q, ServerResultSchema as Qn, ListTasksRequestSchema as Qt, CallToolRequestSchema as R, ResourceTemplateSchema as Rn, JSONRPCRequestSchema as Rt, OAuthTokensSchema as S, PromptMessageSchema as Sn, TitledMultiSelectEnumSchemaSchema as Sr, GetTaskPayloadResultSchema as St, OpenIdProviderMetadata as T, ReadResourceRequestParamsSchema as Tn, ToolChoiceSchema as Tr, IconSchema as Tt, CancelledNotificationSchema as U, RoleSchema as Un, ListChangedOptionsBaseSchema as Ut, CancelTaskResultSchema as V, ResultMetaObjectSchema as Vn, JSONValueSchema as Vt, ClientCapabilitiesSchema as W, RootSchema as Wn, ListPromptsRequestSchema as Wt, CompleteRequestParamsSchema as X, ServerNotificationSchema as Xn, ListRootsRequestSchema as Xt, CompatibilityCallToolResultSchema as Y, ServerCapabilitiesSchema as Yn, ListResourcesResultSchema as Yt, CompleteRequestSchema as Z, ServerRequestSchema as Zn, ListRootsResultSchema as Zt, OAuthProtectedResourceMetadata as _, ProgressNotificationSchema as _n, TaskStatusNotificationParamsSchema as _r, EnumSchemaSchema as _t, OAuthClientInformationFull as a, ModelHintSchema as an, SubscribeRequestSchema as ar, CursorSchema as at, OAuthTokenRevocationRequestSchema as b, PromptArgumentSchema as bn, TextContentSchema as br, GetPromptResultSchema as bt, OAuthClientInformationSchema as c, NotificationSchema as cn, SubscriptionsAcknowledgedNotificationSchema as cr, ElicitRequestFormParamsSchema as ct, OAuthClientRegistrationError as d, PaginatedRequestParamsSchema as dn, SubscriptionsListenResultMetaSchema as dr, ElicitRequestURLParamsSchema as dt, ListToolsRequestSchema as en, SetLevelRequestParamsSchema as er, CreateMessageRequestParamsSchema as et, OAuthClientRegistrationErrorSchema as f, PaginatedRequestSchema as fn, SubscriptionsListenResultSchema as fr, ElicitResultSchema as ft, OAuthMetadataSchema as g, ProgressNotificationParamsSchema as gn, TaskSchema as gr, EmptyResultSchema as gt, OAuthMetadata as h, PrimitiveSchemaDefinitionSchema as hn, TaskMetadataSchema as hr, EmbeddedResourceSchema as ht, OAuthClientInformation as i, LoggingMessageNotificationSchema as in, SubscribeRequestParamsSchema as ir, CreateTaskResultSchema as it, AnnotationsSchema as j, RequestSchema as jn, UnsubscribeRequestParamsSchema as jr, InitializeResultSchema as jt, StoredOAuthClientInformation as k, RequestIdSchema as kn, ToolSchema as kr, InitializeRequestParamsSchema as kt, OAuthClientMetadata as l, NotificationsParamsSchema as ln, SubscriptionsListenRequestParamsSchema as lr, ElicitRequestParamsSchema as lt, OAuthErrorResponseSchema as m, PingRequestSchema as mn, TaskCreationParamsSchema as mr, ElicitationCompleteNotificationSchema as mt, IdJagTokenExchangeResponse as n, LoggingLevelSchema as nn, SingleSelectEnumSchemaSchema as nr, CreateMessageResultSchema as nt, OAuthClientInformationFullSchema as o, ModelPreferencesSchema as on, SubscriptionFilterSchema as or, DiscoverRequestSchema as ot, OAuthErrorResponse as p, PaginatedResultSchema as pn, TaskAugmentedRequestParamsSchema as pr, ElicitationCompleteNotificationParamsSchema as pt, ClientResultSchema as q, SamplingMessageContentBlockSchema as qn, ListResourceTemplatesResultSchema as qt, IdJagTokenExchangeResponseSchema as r, LoggingMessageNotificationParamsSchema as rn, StringSchemaSchema as rr, CreateMessageResultWithToolsSchema as rt, OAuthClientInformationMixed as s, MultiSelectEnumSchemaSchema as sn, SubscriptionsAcknowledgedNotificationParamsSchema as sr, DiscoverResultSchema as st, AuthorizationServerMetadata as t, ListToolsResultSchema as tn, SetLevelRequestSchema as tr, CreateMessageRequestSchema as tt, OAuthClientMetadataSchema as u, NumberSchemaSchema as un, SubscriptionsListenRequestSchema as ur, ElicitRequestSchema as ut, OAuthProtectedResourceMetadataSchema as v, ProgressSchema as vn, TaskStatusNotificationSchema as vr, GetPromptRequestParamsSchema as vt, OpenIdProviderDiscoveryMetadataSchema as w, PromptSchema as wn, ToolAnnotationsSchema as wr, GetTaskResultSchema as wt, OAuthTokens as x, PromptListChangedNotificationSchema as xn, TextResourceContentsSchema as xr, GetTaskPayloadRequestSchema as xt, OAuthTokenRevocationRequest as y, ProgressTokenSchema as yn, TaskStatusSchema as yr, GetPromptRequestSchema as yt, CallToolResultSchema as z, ResourceUpdatedNotificationParamsSchema as zn, JSONRPCResponseSchema as zt };
8506
- //# sourceMappingURL=auth--n_Yzytt.d.cts.map
8507
+ //# sourceMappingURL=auth-Anm-lwWi.d.mts.map