pi-cursor-sdk 0.4.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (799) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +169 -37
  3. package/dist/context-window-cache.js +0 -6
  4. package/dist/context.js +61 -34
  5. package/dist/cursor-api-key.js +34 -19
  6. package/dist/cursor-cloud-lifecycle.js +122 -98
  7. package/dist/cursor-cloud-options.js +1 -0
  8. package/dist/cursor-config.js +59 -0
  9. package/dist/cursor-custom-store-path.js +177 -0
  10. package/dist/cursor-custom-subagent-definitions.js +14 -0
  11. package/dist/cursor-durable-fs.js +97 -3
  12. package/dist/cursor-fallback-models.generated.js +288 -1
  13. package/dist/cursor-fallback-warning.js +10 -4
  14. package/dist/cursor-http1.js +8 -8
  15. package/dist/cursor-live-run-coordinator.js +31 -15
  16. package/dist/cursor-mcp-timeout-override.js +3 -1
  17. package/dist/cursor-native-replay-routing.js +1 -1
  18. package/dist/cursor-native-tool-display-registration.js +46 -22
  19. package/dist/cursor-native-tool-display-state.js +57 -22
  20. package/dist/cursor-native-tool-display-tools.js +5 -6
  21. package/dist/cursor-pi-tool-bridge-constants.js +23 -2
  22. package/dist/cursor-pi-tool-bridge-run.js +28 -3
  23. package/dist/cursor-pi-tool-bridge-server.js +1 -1
  24. package/dist/cursor-pi-tool-bridge-snapshot.js +1 -1
  25. package/dist/cursor-pi-tool-bridge.js +31 -9
  26. package/dist/cursor-provider-binding.js +118 -0
  27. package/dist/cursor-provider-errors.js +61 -33
  28. package/dist/cursor-provider-lazy.js +23 -11
  29. package/dist/cursor-provider-live-run-drain.js +25 -16
  30. package/dist/cursor-provider-run-finalizer.js +21 -9
  31. package/dist/cursor-provider-turn-coordinator.js +1 -0
  32. package/dist/cursor-provider-turn-display-router.js +4 -0
  33. package/dist/cursor-provider-turn-emit.js +1 -0
  34. package/dist/cursor-provider-turn-finalize.js +29 -20
  35. package/dist/cursor-provider-turn-prepare.js +49 -20
  36. package/dist/cursor-provider-turn-runner.js +37 -11
  37. package/dist/cursor-provider-turn-send.js +22 -9
  38. package/dist/cursor-provider-turn-summary.js +89 -0
  39. package/dist/cursor-provider-turn-tool-ledger.js +13 -7
  40. package/dist/cursor-provider.js +10 -3
  41. package/dist/cursor-question-tool.js +5 -5
  42. package/dist/cursor-request-provenance.js +53 -0
  43. package/dist/cursor-ripgrep-path.js +14 -3
  44. package/dist/cursor-runtime-state.js +50 -43
  45. package/dist/cursor-sdk-billed-usage.js +54 -75
  46. package/dist/cursor-sdk-event-debug-session.js +5 -6
  47. package/dist/cursor-sdk-event-debug.js +9 -6
  48. package/dist/cursor-sdk-output-filter.js +1 -1
  49. package/dist/cursor-sdk-process-error-guard.js +9 -10
  50. package/dist/cursor-sdk-runtime.js +13 -1
  51. package/dist/cursor-sdk-vendor-env.js +20 -0
  52. package/dist/cursor-session-agent-cleanup.js +31 -28
  53. package/dist/cursor-session-agent-lifecycle.js +18 -9
  54. package/dist/cursor-session-agent-lineage.js +28 -12
  55. package/dist/cursor-session-agent-resume.js +51 -35
  56. package/dist/cursor-session-agent.js +47 -25
  57. package/dist/cursor-session-compaction-prep.js +2 -7
  58. package/dist/cursor-session-scope.js +71 -39
  59. package/dist/cursor-session-send-policy.js +2 -2
  60. package/dist/cursor-session-settings.js +61 -0
  61. package/dist/cursor-session-store.js +235 -45
  62. package/dist/cursor-skill-tool.js +32 -49
  63. package/dist/cursor-state.js +78 -65
  64. package/dist/cursor-tool-manifest.js +1 -1
  65. package/dist/cursor-usage-accounting.js +13 -70
  66. package/dist/cursor-usage-command.js +89 -0
  67. package/dist/cursor-usage-ledger.js +512 -0
  68. package/dist/index.js +29 -35
  69. package/dist/model-discovery.js +62 -37
  70. package/dist/model-list-cache.js +12 -1
  71. package/docs/cursor-dogfood-checklist.md +3 -3
  72. package/docs/cursor-live-smoke-checklist.md +15 -15
  73. package/docs/cursor-model-ux-spec.md +124 -39
  74. package/docs/cursor-native-tool-replay.md +18 -8
  75. package/docs/cursor-native-tool-visual-audit.md +8 -8
  76. package/docs/cursor-testing-lessons.md +87 -25
  77. package/docs/cursor-tool-surfaces.md +4 -4
  78. package/docs/platform-smoke-implementation.md +10 -6
  79. package/docs/platform-smoke.md +35 -46
  80. package/node_modules/@hono/node-server/README.md +21 -10
  81. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  82. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  83. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  84. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  85. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  86. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  87. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  88. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  89. package/node_modules/@hono/node-server/package.json +3 -2
  90. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
  91. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
  92. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
  93. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
  94. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
  95. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
  96. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
  97. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
  98. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
  99. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
  100. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
  101. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
  102. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
  103. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
  104. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
  105. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
  106. package/node_modules/@modelcontextprotocol/core/package.json +2 -2
  107. package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
  108. package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
  109. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
  110. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
  111. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
  112. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
  113. package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
  114. package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
  115. package/node_modules/@modelcontextprotocol/server/README.md +1 -7
  116. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
  117. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
  118. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
  119. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
  120. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
  121. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
  122. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
  123. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
  124. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
  125. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
  126. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
  127. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
  128. package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
  129. package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
  130. package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
  131. package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
  132. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
  133. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
  134. package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
  135. package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
  136. package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
  137. package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
  138. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
  139. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
  140. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
  141. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
  142. package/node_modules/@modelcontextprotocol/server/package.json +4 -4
  143. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  144. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  145. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  146. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  147. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  148. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  149. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  150. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  151. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  152. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  153. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  154. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  155. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  156. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  157. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  158. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  159. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  160. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  161. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  162. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  163. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  164. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  165. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  166. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  167. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  168. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  169. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  170. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  171. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  172. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  173. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  174. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  175. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  176. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  177. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  178. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  179. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  180. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  181. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  182. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  183. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  184. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  185. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  186. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  187. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  188. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  189. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  190. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  191. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  192. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  193. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  194. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  195. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  196. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  197. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  198. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  199. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  200. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  201. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  202. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  203. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  204. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  205. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  206. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  207. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  208. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  209. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  210. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  211. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  212. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  213. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  214. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  215. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  216. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  217. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  218. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  219. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  220. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  221. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  222. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  223. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  224. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  225. package/node_modules/hono/dist/cjs/compose.js +49 -66
  226. package/node_modules/hono/dist/cjs/context.js +379 -450
  227. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  228. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  229. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  230. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  231. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  232. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  233. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  234. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  235. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  236. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  237. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  238. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  239. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  240. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  241. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  242. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  243. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  244. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  245. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  246. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  247. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  248. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  249. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  250. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  251. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  252. package/node_modules/hono/dist/cjs/hono-base.js +347 -403
  253. package/node_modules/hono/dist/cjs/hono.js +28 -42
  254. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  255. package/node_modules/hono/dist/cjs/index.js +22 -30
  256. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  257. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  258. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  259. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  260. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  261. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  262. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  263. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  264. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  265. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  266. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  267. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  268. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  269. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  270. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  271. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  272. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  273. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  274. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  275. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  276. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  277. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  278. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  279. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  280. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  281. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  282. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  283. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  284. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  285. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  286. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  287. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  288. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  289. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  290. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  291. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  292. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  293. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  294. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  295. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  296. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  297. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  298. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  299. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  300. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  301. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  302. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  303. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  304. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  305. package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
  306. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  307. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  308. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  309. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  310. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  311. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  312. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  313. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  314. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  315. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  316. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  317. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  318. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  319. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  320. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  321. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  322. package/node_modules/hono/dist/cjs/request.js +334 -346
  323. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  324. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  325. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  326. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  327. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  328. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  329. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  330. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  331. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  332. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  333. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  334. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  335. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  336. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  337. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  338. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  339. package/node_modules/hono/dist/cjs/router.js +37 -37
  340. package/node_modules/hono/dist/cjs/types.js +5 -28
  341. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  342. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  343. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  344. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  345. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  346. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  347. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  348. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  349. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  350. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  351. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  352. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  353. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  354. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  355. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  356. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  357. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  358. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  359. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  360. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  361. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  362. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  363. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  364. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  365. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  366. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  367. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  368. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  369. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  370. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  371. package/node_modules/hono/dist/client/client.js +138 -197
  372. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  373. package/node_modules/hono/dist/client/index.js +3 -7
  374. package/node_modules/hono/dist/client/types.js +1 -0
  375. package/node_modules/hono/dist/client/utils.js +51 -68
  376. package/node_modules/hono/dist/compose.js +49 -45
  377. package/node_modules/hono/dist/context.js +376 -426
  378. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  379. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  380. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  381. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  382. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  383. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  384. package/node_modules/hono/dist/helper/css/common.js +167 -225
  385. package/node_modules/hono/dist/helper/css/index.js +132 -137
  386. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  387. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  388. package/node_modules/hono/dist/helper/html/index.js +30 -39
  389. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  390. package/node_modules/hono/dist/helper/route/index.js +121 -43
  391. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  392. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  393. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  394. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  395. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  396. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  397. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  398. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  399. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  400. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  401. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  402. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  403. package/node_modules/hono/dist/hono-base.js +344 -379
  404. package/node_modules/hono/dist/hono.js +27 -20
  405. package/node_modules/hono/dist/http-exception.js +53 -33
  406. package/node_modules/hono/dist/index.js +19 -6
  407. package/node_modules/hono/dist/jsx/base.js +231 -340
  408. package/node_modules/hono/dist/jsx/children.js +16 -20
  409. package/node_modules/hono/dist/jsx/components.js +118 -170
  410. package/node_modules/hono/dist/jsx/constants.js +9 -15
  411. package/node_modules/hono/dist/jsx/context.js +153 -150
  412. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  413. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  414. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  415. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  416. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  417. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  418. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  419. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  420. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  421. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  422. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  423. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  424. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  425. package/node_modules/hono/dist/jsx/index.js +45 -98
  426. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  427. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  428. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  429. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  430. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  431. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  432. package/node_modules/hono/dist/jsx/types.js +1 -0
  433. package/node_modules/hono/dist/jsx/utils.js +105 -168
  434. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  435. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  436. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  437. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  438. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  439. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  440. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  441. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  442. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  443. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  444. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  445. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  446. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  447. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  448. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  449. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  450. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  451. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  452. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  453. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  454. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  455. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  456. package/node_modules/hono/dist/middleware/mount/index.js +70 -0
  457. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  458. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  459. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  460. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  461. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  462. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  463. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  464. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  465. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  466. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  467. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  468. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  469. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  470. package/node_modules/hono/dist/preset/quick.js +17 -15
  471. package/node_modules/hono/dist/preset/tiny.js +14 -11
  472. package/node_modules/hono/dist/request/constants.js +4 -5
  473. package/node_modules/hono/dist/request.js +328 -319
  474. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  475. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  476. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  477. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  478. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  479. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  480. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  481. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  482. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  483. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  484. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  485. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  486. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  487. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  488. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  489. package/node_modules/hono/dist/router/utils.js +4 -5
  490. package/node_modules/hono/dist/router.js +35 -14
  491. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  492. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  493. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  494. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  495. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  496. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  497. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  498. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  499. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  500. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  501. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  502. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  503. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  504. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  505. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  506. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  507. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  508. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  509. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  510. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  511. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  512. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  513. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  514. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  515. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  516. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  517. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  518. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  519. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  520. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  521. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  522. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  523. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  524. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  525. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  526. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  527. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  528. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  529. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  530. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  531. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  532. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  533. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  534. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  535. package/node_modules/hono/dist/types/context.d.ts +335 -335
  536. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  537. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  538. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  539. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  540. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  541. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  542. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  543. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  544. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  545. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  546. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  547. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  548. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  549. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  550. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  551. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  552. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  553. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  554. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  555. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  556. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  557. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  558. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  559. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  560. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  561. package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
  562. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  563. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  564. package/node_modules/hono/dist/types/index.d.ts +6 -37
  565. package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
  566. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  567. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  568. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  569. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  570. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  571. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  572. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  573. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  574. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  575. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  576. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  577. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  578. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  579. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  580. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  581. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  582. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  583. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  584. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  585. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  586. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  587. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  588. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  589. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  590. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  591. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  592. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  593. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  594. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  595. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  596. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  597. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  598. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  599. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  600. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  601. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  602. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  603. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  604. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  605. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  606. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  607. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  608. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  609. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  610. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  611. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  612. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  613. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  614. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
  615. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  616. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  617. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  618. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  619. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  620. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  621. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  622. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  623. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  624. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  625. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  626. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  627. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  628. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  629. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  630. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  631. package/node_modules/hono/dist/types/request.d.ts +288 -286
  632. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  633. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  634. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  635. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  636. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  637. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  638. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  639. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  640. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  641. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  642. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  643. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  644. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  645. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  646. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  647. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  648. package/node_modules/hono/dist/types/router.d.ts +23 -22
  649. package/node_modules/hono/dist/types/types.d.ts +146 -505
  650. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  651. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  652. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  653. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  654. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  655. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  656. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  657. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  658. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  659. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  660. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  661. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  662. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  663. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  664. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  665. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  666. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  667. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  668. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  669. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  670. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  671. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  672. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  673. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  674. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  675. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  676. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  677. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  678. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  679. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  680. package/node_modules/hono/dist/types.js +4 -6
  681. package/node_modules/hono/dist/utils/accept.js +185 -212
  682. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  683. package/node_modules/hono/dist/utils/body.js +87 -92
  684. package/node_modules/hono/dist/utils/buffer.js +44 -71
  685. package/node_modules/hono/dist/utils/color.js +33 -21
  686. package/node_modules/hono/dist/utils/compress.js +11 -5
  687. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  688. package/node_modules/hono/dist/utils/constants.js +7 -5
  689. package/node_modules/hono/dist/utils/cookie.js +114 -163
  690. package/node_modules/hono/dist/utils/crypto.js +30 -40
  691. package/node_modules/hono/dist/utils/encode.js +30 -26
  692. package/node_modules/hono/dist/utils/filepath.js +23 -33
  693. package/node_modules/hono/dist/utils/handler.js +10 -11
  694. package/node_modules/hono/dist/utils/headers.js +1 -0
  695. package/node_modules/hono/dist/utils/html.js +97 -117
  696. package/node_modules/hono/dist/utils/http-status.js +1 -0
  697. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  698. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  699. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  700. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  701. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  702. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  703. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  704. package/node_modules/hono/dist/utils/mime.js +74 -79
  705. package/node_modules/hono/dist/utils/stream.js +86 -88
  706. package/node_modules/hono/dist/utils/types.js +1 -0
  707. package/node_modules/hono/dist/utils/url.js +187 -215
  708. package/node_modules/hono/dist/validator/index.js +1 -4
  709. package/node_modules/hono/dist/validator/utils.js +1 -0
  710. package/node_modules/hono/dist/validator/validator.js +61 -83
  711. package/node_modules/hono/package.json +35 -27
  712. package/package.json +16 -14
  713. package/scripts/cloud-runtime-smoke.mjs +4 -2
  714. package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
  715. package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
  716. package/scripts/local-resume-smoke.mjs +1 -1
  717. package/scripts/platform-smoke/artifacts.mjs +7 -1
  718. package/scripts/platform-smoke/card-detect.mjs +2 -8
  719. package/scripts/platform-smoke/targets.mjs +8 -15
  720. package/scripts/platform-smoke/visual-evidence.mjs +7 -2
  721. package/scripts/tmux-live-smoke.sh +57 -90
  722. package/shared/cursor-sdk-output-filter.d.mts +3 -0
  723. package/shared/cursor-sdk-output-filter.mjs +117 -44
  724. package/src/context-window-cache.ts +0 -6
  725. package/src/context.ts +65 -33
  726. package/src/cursor-api-key.ts +37 -17
  727. package/src/cursor-cloud-lifecycle.ts +124 -98
  728. package/src/cursor-cloud-options.ts +2 -0
  729. package/src/cursor-config.ts +76 -0
  730. package/src/cursor-custom-store-path.ts +151 -0
  731. package/src/cursor-custom-subagent-definitions.ts +21 -0
  732. package/src/cursor-durable-fs.ts +65 -3
  733. package/src/cursor-fallback-models.generated.ts +288 -1
  734. package/src/cursor-fallback-warning.ts +9 -5
  735. package/src/cursor-http1.ts +8 -8
  736. package/src/cursor-live-run-coordinator.ts +33 -15
  737. package/src/cursor-mcp-timeout-override.ts +3 -1
  738. package/src/cursor-native-replay-routing.ts +2 -1
  739. package/src/cursor-native-tool-display-registration.ts +48 -24
  740. package/src/cursor-native-tool-display-state.ts +65 -21
  741. package/src/cursor-native-tool-display-tools.ts +7 -4
  742. package/src/cursor-pi-tool-bridge-constants.ts +27 -2
  743. package/src/cursor-pi-tool-bridge-run.ts +32 -3
  744. package/src/cursor-pi-tool-bridge-server.ts +1 -2
  745. package/src/cursor-pi-tool-bridge-snapshot.ts +1 -1
  746. package/src/cursor-pi-tool-bridge-types.ts +3 -0
  747. package/src/cursor-pi-tool-bridge.ts +26 -9
  748. package/src/cursor-provider-binding.ts +121 -0
  749. package/src/cursor-provider-errors.ts +59 -35
  750. package/src/cursor-provider-lazy.ts +21 -15
  751. package/src/cursor-provider-live-run-drain.ts +29 -17
  752. package/src/cursor-provider-run-finalizer.ts +26 -16
  753. package/src/cursor-provider-turn-coordinator.ts +2 -0
  754. package/src/cursor-provider-turn-display-router.ts +5 -0
  755. package/src/cursor-provider-turn-emit.ts +3 -1
  756. package/src/cursor-provider-turn-finalize.ts +38 -23
  757. package/src/cursor-provider-turn-prepare.ts +51 -27
  758. package/src/cursor-provider-turn-runner.ts +40 -13
  759. package/src/cursor-provider-turn-send.ts +23 -15
  760. package/src/cursor-provider-turn-summary.ts +94 -0
  761. package/src/cursor-provider-turn-tool-ledger.ts +12 -7
  762. package/src/cursor-provider-turn-types.ts +37 -4
  763. package/src/cursor-provider.ts +28 -4
  764. package/src/cursor-question-tool.ts +5 -5
  765. package/src/cursor-request-provenance.ts +79 -0
  766. package/src/cursor-ripgrep-path.ts +15 -5
  767. package/src/cursor-runtime-state.ts +53 -48
  768. package/src/cursor-sdk-billed-usage.ts +54 -102
  769. package/src/cursor-sdk-event-debug-session.ts +5 -5
  770. package/src/cursor-sdk-event-debug.ts +10 -6
  771. package/src/cursor-sdk-output-filter.ts +2 -0
  772. package/src/cursor-sdk-process-error-guard.ts +8 -9
  773. package/src/cursor-sdk-runtime.ts +15 -2
  774. package/src/cursor-sdk-vendor-env.ts +22 -0
  775. package/src/cursor-session-agent-cleanup.ts +30 -29
  776. package/src/cursor-session-agent-lifecycle.ts +14 -9
  777. package/src/cursor-session-agent-lineage.ts +26 -12
  778. package/src/cursor-session-agent-resume.ts +49 -36
  779. package/src/cursor-session-agent.ts +57 -27
  780. package/src/cursor-session-compaction-prep.ts +2 -7
  781. package/src/cursor-session-scope.ts +87 -39
  782. package/src/cursor-session-send-policy.ts +2 -2
  783. package/src/cursor-session-settings.ts +72 -0
  784. package/src/cursor-session-store.ts +259 -53
  785. package/src/cursor-skill-tool.ts +37 -61
  786. package/src/cursor-state.ts +81 -69
  787. package/src/cursor-tool-manifest.ts +1 -1
  788. package/src/cursor-usage-accounting.ts +17 -82
  789. package/src/cursor-usage-command.ts +76 -0
  790. package/src/cursor-usage-ledger.ts +500 -0
  791. package/src/index.ts +30 -39
  792. package/src/model-discovery.ts +76 -45
  793. package/src/model-list-cache.ts +11 -1
  794. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
  795. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
  796. package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
  797. package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
  798. package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
  799. package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import { CursorLiveRunAbortError } from "./cursor-live-run-coordinator.js";
2
2
  import { drainExistingCursorLiveRunBeforeSend } from "./cursor-provider-live-run-drain.js";
3
- import { getCursorSessionCwd } from "./cursor-session-scope.js";
4
3
  import { installCursorSdkProcessErrorGuard } from "./cursor-sdk-process-error-guard.js";
5
4
  import type { CursorRuntime } from "./cursor-config.js";
6
5
  import { CursorSdkEventDebugSink } from "./cursor-sdk-event-debug.js";
@@ -22,14 +21,15 @@ import type {
22
21
  CursorProviderTurnSendResult,
23
22
  LiveCursorProviderTurnRuntime,
24
23
  LocalCursorProviderTurnPrepareResult,
24
+ StartedCursorProviderTurn,
25
25
  } from "./cursor-provider-turn-types.js";
26
26
 
27
27
  export type { CursorProviderTurnRunnerParams } from "./cursor-provider-turn-types.js";
28
28
 
29
- type LocalLivePreparedTurn = LocalCursorProviderTurnPrepareResult & { runtime: LiveCursorProviderTurnRuntime };
29
+ type LocalLivePreparedTurn = StartedCursorProviderTurn & LocalCursorProviderTurnPrepareResult & { runtime: LiveCursorProviderTurnRuntime };
30
30
 
31
- function requireLocalLivePreparedTurn(prepared: CursorProviderTurnPrepareResult): LocalLivePreparedTurn {
32
- if (prepared.runtimeTarget !== "local" || prepared.runtime.kind !== "live") {
31
+ function requireLocalLivePreparedTurn(prepared: StartedCursorProviderTurn): LocalLivePreparedTurn {
32
+ if (prepared.runtimeTarget !== "local" || prepared.execution !== "conversation" || prepared.runtime.kind !== "live") {
33
33
  throw new Error("Cursor live run requires a local live prepared turn");
34
34
  }
35
35
  return prepared as LocalLivePreparedTurn;
@@ -53,6 +53,7 @@ export class CursorProviderTurnRunner {
53
53
  async run(sdkProcessErrorGuard: ReturnType<typeof installCursorSdkProcessErrorGuard>): Promise<void> {
54
54
  const { stream, partial, model, context, options, sdkEventDebugRef } = this.params;
55
55
  let prepared: CursorProviderTurnPrepareResult | undefined;
56
+ let started: StartedCursorProviderTurn | undefined;
56
57
  let sendResult: CursorProviderTurnSendResult | undefined;
57
58
  let liveCompletion: CursorLiveRunCompletion | undefined;
58
59
  const runFinalizer = new CursorRunFinalizer({
@@ -65,21 +66,23 @@ export class CursorProviderTurnRunner {
65
66
 
66
67
  try {
67
68
  this.throwIfAborted();
68
- const cwd = getCursorSessionCwd();
69
+ const { scope } = this.params;
70
+ const cwd = scope.cwd;
69
71
  this.sdkEventDebug = CursorSdkEventDebugSink.maybeCreate({
70
72
  cwd,
71
73
  modelId: model.id,
72
74
  provider: model.provider,
75
+ scope,
73
76
  });
74
77
  sdkEventDebugRef.current = this.sdkEventDebug;
75
78
  this.sdkEventDebug?.recordContextSnapshot(context);
76
79
  // Resolved once here, before any drain await, so the drain decision and the
77
80
  // prepare dispatch below always act on the same config snapshot.
78
- const resolvedConfig = resolveCursorProviderTurnConfig(cwd);
81
+ const resolvedConfig = resolveCursorProviderTurnConfig(cwd, scope.projectTrusted, scope.scopeKey);
79
82
  this.runtimeTarget = resolvedConfig.runtime.value;
80
- if (resolvedConfig.runtime.value === "local") {
83
+ if (resolvedConfig.runtime.value === "local" && this.params.request.purpose === "normal") {
81
84
  if (
82
- (await drainExistingCursorLiveRunBeforeSend(stream, partial, model, context, options?.signal, this.sdkEventDebug)) ===
85
+ (await drainExistingCursorLiveRunBeforeSend(stream, partial, model, context, options?.signal, this.sdkEventDebug, scope.scopeKey, this.params.request.occupancyFloor)) ===
83
86
  "stream_ended"
84
87
  ) {
85
88
  return;
@@ -97,9 +100,33 @@ export class CursorProviderTurnRunner {
97
100
  resolvedConfig,
98
101
  });
99
102
 
103
+ const usage = await this.params.usageRecorder.start({
104
+ agent: prepared.agent,
105
+ runtime: prepared.runtimeTarget,
106
+ model: { id: model.id, provider: model.provider, cost: { ...model.cost } },
107
+ modelSelection: prepared.meta.modelSelection,
108
+ purpose: this.params.request.purpose,
109
+ ...(prepared.runtimeTarget === "local" ? { storeIdentity: prepared.storeIdentity.stateRoot } : {}),
110
+ resumed: prepared.runtimeTarget === "local" && prepared.execution === "conversation" && prepared.sessionAgentLease.resumed === true,
111
+ newlyCreated: prepared.runtimeTarget !== "local" || prepared.execution === "summary" || (prepared.sessionAgentLease.created && !prepared.sessionAgentLease.resumed),
112
+ }).catch(error => {
113
+ this.params.usageRecorder.notePersistenceFailure(error);
114
+ throw error;
115
+ });
116
+ started = { ...prepared, usage };
117
+ if (started.runtime.liveRun) {
118
+ started.runtime.liveRun.onAbandon = async () => {
119
+ try {
120
+ await usage.recordTerminal({ status: "abandon" });
121
+ } catch (error) {
122
+ usage.notePersistenceFailure(error);
123
+ }
124
+ };
125
+ }
126
+
100
127
  sendResult = await sendCursorProviderTurn({
101
128
  params: this.params,
102
- prepared,
129
+ prepared: started,
103
130
  sdkEventDebug: this.sdkEventDebug,
104
131
  sdkProcessErrorGuard,
105
132
  throwIfAborted: () => this.throwIfAborted(),
@@ -108,7 +135,7 @@ export class CursorProviderTurnRunner {
108
135
  const { send } = sendResult;
109
136
 
110
137
  if (prepared.runtime.kind === "live") {
111
- const livePrepared = requireLocalLivePreparedTurn(prepared);
138
+ const livePrepared = requireLocalLivePreparedTurn(started);
112
139
  liveCompletion = runFinalizer.startLiveRunCompletion({
113
140
  send,
114
141
  prepared: livePrepared,
@@ -126,7 +153,7 @@ export class CursorProviderTurnRunner {
126
153
 
127
154
  const outcomePromise = awaitFinalizeCursorRunOutcome({
128
155
  run: send.run,
129
- prepared,
156
+ prepared: started,
130
157
  cursorAgentMessageOffset: send.cursorAgentMessageOffset,
131
158
  modelId: model.id,
132
159
  signal: options?.signal,
@@ -141,12 +168,12 @@ export class CursorProviderTurnRunner {
141
168
  const finalized = await outcomePromise;
142
169
  await runFinalizer.applyTerminalEvent({
143
170
  kind: "direct",
144
- prepared,
171
+ prepared: started,
145
172
  outcome: finalized.outcome,
146
173
  displayOnlyTraceBlock: finalized.displayOnlyTraceBlock,
147
174
  });
148
175
  } catch (error) {
149
- await runFinalizer.applyTerminalEvent({ kind: "error", prepared, error });
176
+ await runFinalizer.applyTerminalEvent({ kind: "error", prepared: started ?? prepared, error });
150
177
  } finally {
151
178
  await runFinalizer.cleanup(prepared, sendResult, liveCompletion);
152
179
  }
@@ -1,24 +1,20 @@
1
1
  import type { SendOptions } from "@cursor/sdk";
2
2
  import { countCursorAgentMessages } from "./cursor-agent-message-web-tools.js";
3
- import {
4
- createCursorCloudLifecyclePersistenceError,
5
- recordCursorCloudLifecycleSafely,
6
- } from "./cursor-cloud-lifecycle.js";
7
- import { CursorLiveRunAbortError } from "./cursor-live-run-coordinator.js";
3
+ import { createCursorCloudLifecyclePersistenceError } from "./cursor-cloud-lifecycle.js";
8
4
  import { cursorLiveRuns } from "./cursor-provider-live-run-drain.js";
9
5
  import { consumeCursorLocalForceOverride } from "./cursor-runtime-state.js";
10
6
  import { recordCursorSessionAgentLineage } from "./cursor-session-agent-lineage.js";
11
7
  import type { installCursorSdkProcessErrorGuard } from "./cursor-sdk-process-error-guard.js";
12
8
  import type {
13
9
  CursorProviderTurnRunnerParams,
14
- CursorProviderTurnPrepareResult,
10
+ StartedCursorProviderTurn,
15
11
  CursorProviderTurnSendResult,
16
12
  } from "./cursor-provider-turn-types.js";
17
13
  import type { CursorSdkEventDebugSink } from "./cursor-sdk-event-debug.js";
18
14
 
19
15
  export interface SendCursorProviderTurnParams {
20
16
  params: CursorProviderTurnRunnerParams;
21
- prepared: CursorProviderTurnPrepareResult;
17
+ prepared: StartedCursorProviderTurn;
22
18
  sdkEventDebug: CursorSdkEventDebugSink | undefined;
23
19
  sdkProcessErrorGuard: ReturnType<typeof installCursorSdkProcessErrorGuard>;
24
20
  throwIfAborted: () => void;
@@ -27,7 +23,7 @@ export interface SendCursorProviderTurnParams {
27
23
 
28
24
  const CLOUD_LEDGER_CANCEL_TIMEOUT_MS = 5000;
29
25
 
30
- async function requestBoundedCloudRunCancellation(run: Awaited<ReturnType<CursorProviderTurnPrepareResult["agent"]["send"]>>): Promise<boolean> {
26
+ async function requestBoundedCloudRunCancellation(run: Awaited<ReturnType<StartedCursorProviderTurn["agent"]["send"]>>): Promise<boolean> {
31
27
  let timer: ReturnType<typeof setTimeout> | undefined;
32
28
  const timeout = new Promise<false>((resolve) => {
33
29
  timer = setTimeout(() => resolve(false), CLOUD_LEDGER_CANCEL_TIMEOUT_MS);
@@ -75,9 +71,9 @@ export async function sendCursorProviderTurn(sendParams: SendCursorProviderTurnP
75
71
  abortRegistration?.signal.addEventListener("abort", abortListener, { once: true });
76
72
  throwIfAborted();
77
73
  let cursorAgentMessageOffset: number | undefined;
78
- if (prepared.runtimeTarget === "local") {
74
+ if (prepared.runtimeTarget === "local" && prepared.execution === "conversation") {
79
75
  try {
80
- cursorAgentMessageOffset = await countCursorAgentMessages(agent.agentId, cwd, prepared.sessionAgentLease.store);
76
+ cursorAgentMessageOffset = await countCursorAgentMessages(agent.agentId, cwd, prepared.store);
81
77
  } catch (error) {
82
78
  recordDebug(() => sdkEventDebug?.recordError("cursor_agent_message_count", error));
83
79
  }
@@ -102,6 +98,13 @@ export async function sendCursorProviderTurn(sendParams: SendCursorProviderTurnP
102
98
  mode: meta.agentMode,
103
99
  model: meta.modelSelection,
104
100
  onDelta: (args) => {
101
+ if (args.update.type === "turn-ended") {
102
+ try {
103
+ prepared.usage.observeRawTurn(args.update.usage);
104
+ } catch (error) {
105
+ params.usageRecorder.notePersistenceFailure(error);
106
+ }
107
+ }
105
108
  recordDebug(() => sdkEventDebug?.recordOnDelta(args.update));
106
109
  turnCoordinator.handleDelta(args.update);
107
110
  },
@@ -111,17 +114,23 @@ export async function sendCursorProviderTurn(sendParams: SendCursorProviderTurnP
111
114
  },
112
115
  };
113
116
  throwIfAborted();
114
- if (prepared.runtimeTarget === "local" && consumeCursorLocalForceOverride(prepared.localForce)) {
117
+ if (prepared.runtimeTarget === "local" && prepared.execution === "conversation" && consumeCursorLocalForceOverride(prepared.localForce, params.scope.scopeKey)) {
115
118
  sendOptions.local = { force: true };
116
119
  }
117
120
  const runPromise = agent.send(payload, sendOptions);
118
121
  // Record at send initiation (promise created), including later reject/cancel paths.
119
- if (prepared.runtimeTarget === "local") {
120
- recordCursorSessionAgentLineage(agent.agentId);
122
+ if (prepared.runtimeTarget === "local" && prepared.execution === "conversation") {
123
+ recordCursorSessionAgentLineage(agent.agentId, params.scope.scopeKey);
121
124
  }
122
125
  const run = await runPromise;
123
126
  sdkRun = run;
124
- if (prepared.runtimeTarget === "cloud" && !recordCursorCloudLifecycleSafely({ agentId: run.agentId, runId: run.id }, resolvedApiKey)) {
127
+ runtime.sdkRun = run;
128
+ try {
129
+ await prepared.usage.recordRun({ runId: run.id, requestId: run.requestId });
130
+ } catch (error) {
131
+ params.usageRecorder.notePersistenceFailure(error);
132
+ }
133
+ if (prepared.runtimeTarget === "cloud" && !params.recordCloudLifecycle({ agentId: run.agentId, runId: run.id }, resolvedApiKey)) {
125
134
  const cancellationConfirmed = await requestBoundedCloudRunCancellation(run);
126
135
  throw createCursorCloudLifecyclePersistenceError(run.agentId, "run", cancellationConfirmed, resolvedApiKey);
127
136
  }
@@ -143,7 +152,6 @@ export async function sendCursorProviderTurn(sendParams: SendCursorProviderTurnP
143
152
  sdkProcessErrorGuard.suppressAbortErrors();
144
153
  liveRun?.bridgeRun?.cancel("Cursor SDK run aborted");
145
154
  await run.cancel().catch(() => {});
146
- throw new CursorLiveRunAbortError();
147
155
  }
148
156
 
149
157
  completed = true;
@@ -0,0 +1,94 @@
1
+ import type { ModelSelection, SDKAgent } from "@cursor/sdk";
2
+ import { buildCursorSummaryPrompt, estimateCursorPromptTokens } from "./context.js";
3
+ import { configureCursorSdkHttp1 } from "./cursor-http1.js";
4
+ import { createCursorNativeReplayId } from "./cursor-provider-live-run-drain.js";
5
+ import type { PrepareCursorProviderTurnParams } from "./cursor-provider-turn-prepare.js";
6
+ import { CursorSdkTurnCoordinator } from "./cursor-provider-turn-coordinator.js";
7
+ import type { CursorProviderTurnLifecycle, SummaryCursorProviderTurnPrepareResult } from "./cursor-provider-turn-types.js";
8
+ import { ensureCursorRipgrepPath } from "./cursor-ripgrep-path.js";
9
+ import { loadCursorSdk } from "./cursor-sdk-runtime.js";
10
+ import { installCursorSdkOutputFilter, suppressCursorSdkOutput } from "./cursor-sdk-output-filter.js";
11
+ import { buildCursorLocalAgentOptions } from "./cursor-session-agent.js";
12
+ import { openCursorSessionStoreForScope, type OpenCursorSessionStore } from "./cursor-session-store.js";
13
+ import { getCursorPromptOptions } from "./cursor-usage-accounting.js";
14
+
15
+ function summaryLifecycle(agent: SDKAgent, sessionStore: OpenCursorSessionStore): CursorProviderTurnLifecycle {
16
+ let disposal: Promise<void> | undefined;
17
+ const dispose = () => disposal ??= (async () => {
18
+ try {
19
+ await agent[Symbol.asyncDispose]();
20
+ } finally {
21
+ await sessionStore.dispose();
22
+ }
23
+ })();
24
+ return { trackRunCompletion: () => {}, commitSend: () => {}, abandon: dispose, dispose };
25
+ }
26
+
27
+ /** A native summary never enters the conversation pool or inherits its tool/mode/resume state. */
28
+ export async function prepareCursorSummaryProviderTurn(
29
+ prepareParams: PrepareCursorProviderTurnParams,
30
+ selection: ModelSelection,
31
+ ): Promise<SummaryCursorProviderTurnPrepareResult> {
32
+ const { params, cwd, resolvedApiKey, resolvedConfig, sdkEventDebug, throwIfAborted } = prepareParams;
33
+ let sessionStore: OpenCursorSessionStore | undefined;
34
+ let agent: SDKAgent | undefined;
35
+ let restoreCursorSdkOutputFilter: (() => void) | undefined;
36
+ let completed = false;
37
+ try {
38
+ ensureCursorRipgrepPath();
39
+ const sdk = await loadCursorSdk();
40
+ configureCursorSdkHttp1(sdk, resolvedConfig.local.useHttp1ForAgent);
41
+ restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
42
+ sessionStore = (await openCursorSessionStoreForScope({
43
+ cwd, scopeKey: params.scope.scopeKey, persistent: false,
44
+ })).sessionStore;
45
+ throwIfAborted();
46
+ agent = await suppressCursorSdkOutput(() => sdk.Agent.create({
47
+ apiKey: resolvedApiKey,
48
+ model: selection,
49
+ mode: "agent",
50
+ tools: [],
51
+ local: buildCursorLocalAgentOptions({ cwd, store: sessionStore!.store, settingSources: [] }),
52
+ }));
53
+ throwIfAborted();
54
+ const prompt = buildCursorSummaryPrompt(params.context);
55
+ const promptInputTokens = estimateCursorPromptTokens(prompt, getCursorPromptOptions(params.model));
56
+ const nativeReplayId = createCursorNativeReplayId();
57
+ const textDeltas: string[] = [];
58
+ const turnCoordinator = new CursorSdkTurnCoordinator({
59
+ stream: params.stream, partial: params.partial, cwd, resolvedApiKey,
60
+ useNativeToolReplay: false, nativeReplayId, textDeltas, debugRecorder: sdkEventDebug,
61
+ });
62
+ sdkEventDebug?.recordProviderMeta({
63
+ purpose: params.request.purpose,
64
+ runtime: "local",
65
+ summaryAgentId: agent.agentId,
66
+ model: { id: params.model.id, provider: params.model.provider, selection },
67
+ agentMode: "agent", settingSources: [], tools: [], resumedAgent: false,
68
+ });
69
+ completed = true;
70
+ return {
71
+ runtimeTarget: "local", execution: "summary", agent, cwd,
72
+ store: sessionStore.store, storeIdentity: sessionStore.identity,
73
+ payload: { text: prompt.text },
74
+ meta: {
75
+ sendPlan: { mode: "bootstrap", resetAgent: false, reason: "initial" },
76
+ prompt, bootstrap: true, promptInputTokens,
77
+ useNativeToolReplay: false, bridgeEnabled: false, nativeReplayId,
78
+ agentMode: "agent", modelSelection: selection,
79
+ },
80
+ contextWindowAgentId: agent.agentId, textDeltas, restoreCursorSdkOutputFilter,
81
+ lifecycle: summaryLifecycle(agent, sessionStore),
82
+ runtime: { kind: "direct", turnCoordinator },
83
+ };
84
+ } finally {
85
+ if (!completed) {
86
+ try {
87
+ await agent?.[Symbol.asyncDispose]().catch(() => {});
88
+ } finally {
89
+ await sessionStore?.dispose().catch(() => {});
90
+ restoreCursorSdkOutputFilter?.();
91
+ }
92
+ }
93
+ }
94
+ }
@@ -1,3 +1,4 @@
1
+ import { normalizeCursorToolName } from "./cursor-tool-presentation-registry.js";
1
2
  import { getToolArgs, getToolName } from "./cursor-transcript-utils.js";
2
3
 
3
4
  export type CursorToolDisplaySource = "started" | "fallback" | "transcript";
@@ -53,12 +54,12 @@ export class CursorToolCompletionLedger {
53
54
  return stepId;
54
55
  }
55
56
  const fingerprint = getStartedToolCallFingerprint(toolCall);
56
- for (const [callId, startedToolCall] of this.startedToolCalls) {
57
- if (getStartedToolCallFingerprint(startedToolCall) !== fingerprint) continue;
58
- this.clearStartedToolCall(callId);
59
- return callId;
60
- }
61
- return undefined;
57
+ const matches = [...this.startedToolCalls].filter(([, started]) => getStartedToolCallFingerprint(started) === fingerprint);
58
+ // Identical concurrent shells cannot be joined safely without a matching ID.
59
+ if (normalizeCursorToolName(getToolName(toolCall)) === "shell" && matches.length !== 1) return undefined;
60
+ const callId = matches[0]?.[0];
61
+ if (callId !== undefined) this.clearStartedToolCall(callId);
62
+ return callId;
62
63
  }
63
64
 
64
65
  recordCompletedIdentity(identity: string): void {
@@ -121,5 +122,9 @@ export function getToolFingerprint(value: unknown): string {
121
122
  }
122
123
 
123
124
  export function getStartedToolCallFingerprint(toolCall: unknown): string {
124
- return getToolFingerprint({ toolName: getToolName(toolCall), args: getToolArgs(toolCall) });
125
+ const name = getToolName(toolCall);
126
+ // Accept legacy shell aliases; this does not establish that the SDK emits alias-changing pairs.
127
+ // Keep exact argument matching; assistant text alone is not completion proof.
128
+ const toolName = normalizeCursorToolName(name) === "shell" ? "shell" : name;
129
+ return getToolFingerprint({ toolName, args: getToolArgs(toolCall) });
125
130
  }
@@ -6,7 +6,7 @@ import type {
6
6
  Model,
7
7
  SimpleStreamOptions,
8
8
  } from "@earendil-works/pi-ai";
9
- import type { AgentModeOption, ModelSelection, SDKAgent, SDKImage } from "@cursor/sdk";
9
+ import type { AgentModeOption, LocalAgentStore, ModelSelection, SDKAgent, SDKImage } from "@cursor/sdk";
10
10
  import type { CursorLiveRun } from "./cursor-live-run-coordinator.js";
11
11
  import type { SessionCursorAgentLease } from "./cursor-session-agent.js";
12
12
  import type { planCursorSessionSend } from "./cursor-session-agent.js";
@@ -14,9 +14,22 @@ import type { CursorSdkEventDebugSink } from "./cursor-sdk-event-debug.js";
14
14
  import type { CursorSdkTurnCoordinator } from "./cursor-provider-turn-coordinator.js";
15
15
  import type { CursorPrompt } from "./context.js";
16
16
  import type { CursorResolvedSetting } from "./cursor-config.js";
17
- import type { CursorSdkTurnUsage } from "./cursor-usage-accounting.js";
17
+ import type { CursorRequestProvenance } from "./cursor-request-provenance.js";
18
+ import type { CursorUsageRecorder, CursorUsageTurnRecorder } from "./cursor-usage-ledger.js";
19
+ import type { CursorSessionStoreIdentity } from "./cursor-session-store.js";
20
+
21
+ import type { CursorPiToolBridge } from "./cursor-pi-tool-bridge.js";
22
+ import type { CursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
23
+ import type { CursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
24
+ import type { CursorTurnScope } from "./cursor-session-scope.js";
18
25
 
19
26
  export interface CursorProviderTurnRunnerParams {
27
+ scope: CursorTurnScope;
28
+ bridge?: CursorPiToolBridge;
29
+ nativeDisplay?: CursorNativeToolDisplayState;
30
+ recordCloudLifecycle: CursorCloudLifecycleRecorder;
31
+ request: CursorRequestProvenance;
32
+ usageRecorder: CursorUsageRecorder;
20
33
  model: Model<Api>;
21
34
  context: Context;
22
35
  stream: AssistantMessageEventStream;
@@ -45,7 +58,8 @@ export interface CursorProviderTurnSendMeta {
45
58
 
46
59
  interface CursorProviderTurnRuntimeBase {
47
60
  turnCoordinator: CursorSdkTurnCoordinator;
48
- billedTurnUsage?: CursorSdkTurnUsage;
61
+ sdkRun?: Awaited<ReturnType<SDKAgent["send"]>>;
62
+ usageTerminalRecorded?: boolean;
49
63
  }
50
64
 
51
65
  /**
@@ -85,15 +99,30 @@ interface CursorProviderTurnPrepareResultBase {
85
99
  lifecycle: CursorProviderTurnLifecycle;
86
100
  }
87
101
 
88
- export interface LocalCursorProviderTurnPrepareResult extends CursorProviderTurnPrepareResultBase {
102
+ interface LocalCursorProviderTurnPrepareResultBase extends CursorProviderTurnPrepareResultBase {
89
103
  runtimeTarget: "local";
104
+ store: LocalAgentStore;
105
+ storeIdentity: CursorSessionStoreIdentity;
106
+ }
107
+
108
+ export interface LocalCursorProviderTurnPrepareResult extends LocalCursorProviderTurnPrepareResultBase {
109
+ execution: "conversation";
90
110
  runtime: CursorProviderTurnRuntime;
91
111
  sessionAgentScopeKey: string;
92
112
  sessionAgentLease: SessionCursorAgentLease;
93
113
  localForce: CursorResolvedSetting<boolean>;
94
114
  }
95
115
 
116
+ export interface SummaryCursorProviderTurnPrepareResult extends LocalCursorProviderTurnPrepareResultBase {
117
+ execution: "summary";
118
+ runtime: DirectCursorProviderTurnRuntime;
119
+ sessionAgentScopeKey?: undefined;
120
+ sessionAgentLease?: undefined;
121
+ }
122
+
96
123
  export interface CloudCursorProviderTurnPrepareResult extends CursorProviderTurnPrepareResultBase {
124
+ execution: "conversation";
125
+ recordCloudLifecycle: CursorCloudLifecycleRecorder;
97
126
  runtimeTarget: "cloud";
98
127
  runtime: DirectCursorProviderTurnRuntime;
99
128
  sessionAgentScopeKey?: undefined;
@@ -108,8 +137,12 @@ export interface CloudCursorProviderTurnPrepareResult extends CursorProviderTurn
108
137
  */
109
138
  export type CursorProviderTurnPrepareResult =
110
139
  | LocalCursorProviderTurnPrepareResult
140
+ | SummaryCursorProviderTurnPrepareResult
111
141
  | CloudCursorProviderTurnPrepareResult;
112
142
 
143
+ /** Accounting has claimed the origin before this turn can execute a send. */
144
+ export type StartedCursorProviderTurn = CursorProviderTurnPrepareResult & { usage: CursorUsageTurnRecorder };
145
+
113
146
  export interface CursorProviderTurnSend {
114
147
  run: Awaited<ReturnType<SDKAgent["send"]>>;
115
148
  cursorAgentMessageOffset: number | undefined;
@@ -22,8 +22,14 @@ import { installCursorSdkProcessErrorGuard } from "./cursor-sdk-process-error-gu
22
22
  import { sanitizeCursorProviderError } from "./cursor-provider-errors.js";
23
23
  import { resolveCursorApiKey } from "./cursor-api-key.js";
24
24
  import { CursorProviderTurnRunner } from "./cursor-provider-turn-runner.js";
25
- import { getCursorSessionScopeKey } from "./cursor-session-scope.js";
25
+ import type { CursorTurnScope } from "./cursor-session-scope.js";
26
+ import type { CursorPiToolBridge } from "./cursor-pi-tool-bridge.js";
27
+ import type { CursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
28
+ import type { CursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
29
+ import type { CursorRequestProvenance } from "./cursor-request-provenance.js";
30
+ import type { CursorUsageRecorder } from "./cursor-usage-ledger.js";
26
31
  import { runExclusiveCursorSessionTurn, __testUtils as cursorSessionTurnQueueTestUtils } from "./cursor-session-turn-queue.js";
32
+ import { withCursorSdkOutputNoticeHandler, type CursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
27
33
 
28
34
  function makeInitialMessage(model: Model<Api>): AssistantMessage {
29
35
  return {
@@ -45,11 +51,23 @@ function makeInitialMessage(model: Model<Api>): AssistantMessage {
45
51
  };
46
52
  }
47
53
 
54
+ export interface CursorProviderOwnership {
55
+ scope: CursorTurnScope;
56
+ bridge?: CursorPiToolBridge;
57
+ nativeDisplay?: CursorNativeToolDisplayState;
58
+ recordCloudLifecycle: CursorCloudLifecycleRecorder;
59
+ request: CursorRequestProvenance;
60
+ usageRecorder: CursorUsageRecorder;
61
+ reportSdkNotice?: CursorSdkOutputNoticeHandler;
62
+ }
63
+
48
64
  export function streamCursor(
49
65
  model: Model<Api>,
50
66
  context: Context,
51
- options?: SimpleStreamOptions,
67
+ options: SimpleStreamOptions | undefined,
68
+ ownership: CursorProviderOwnership,
52
69
  ): AssistantMessageEventStream {
70
+ const { scope, bridge, nativeDisplay, recordCloudLifecycle, request, usageRecorder } = ownership;
53
71
  const stream = createAssistantMessageEventStream();
54
72
  const sdkEventDebugRef: { current?: CursorSdkEventDebugSink } = {};
55
73
  attachCursorSdkEventDebugPiStreamTap(stream, sdkEventDebugRef);
@@ -59,6 +77,12 @@ export function streamCursor(
59
77
 
60
78
  const runner = new CursorProviderTurnRunner({
61
79
  model,
80
+ scope,
81
+ bridge,
82
+ nativeDisplay,
83
+ recordCloudLifecycle,
84
+ request,
85
+ usageRecorder,
62
86
  context,
63
87
  stream,
64
88
  partial,
@@ -69,8 +93,8 @@ export function streamCursor(
69
93
  try {
70
94
  stream.push({ type: "start", partial });
71
95
  await runExclusiveCursorSessionTurn(
72
- getCursorSessionScopeKey(),
73
- () => runner.run(installCursorSdkProcessErrorGuard()),
96
+ scope.scopeKey,
97
+ () => withCursorSdkOutputNoticeHandler(ownership.reportSdkNotice, () => runner.run(installCursorSdkProcessErrorGuard())),
74
98
  options?.signal,
75
99
  );
76
100
  } catch (error) {
@@ -11,7 +11,7 @@ export const CURSOR_ASK_QUESTION_TOOL_NAME = "cursor_ask_question";
11
11
  export const CURSOR_ASK_QUESTION_ENV = "PI_CURSOR_ASK_QUESTION";
12
12
 
13
13
  export function resolveCursorAskQuestionEnabled(env: Record<string, string | undefined> = process.env): boolean {
14
- return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], true);
14
+ return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], false);
15
15
  }
16
16
 
17
17
  /** Package-namespaced event while `cursor_ask_question` awaits pi UI input. */
@@ -216,13 +216,13 @@ export function registerCursorQuestionTool(pi: CursorQuestionToolExtensionApi):
216
216
  name: CURSOR_ASK_QUESTION_TOOL_NAME,
217
217
  label: "Cursor question",
218
218
  description:
219
- "Ask the user a clarifying question from Cursor. Use when user preferences materially affect the next step; provide options when possible.",
220
- promptSnippet: "Ask the user a clarifying question through pi UI when material choices affect Cursor's next step",
219
+ "Ask the user a clarifying question through pi UI. Do not use this unless the user asked to be prompted; otherwise proceed with a stated assumption.",
220
+ promptSnippet: "Do not prompt the user through cursor_ask_question unless they asked to be asked",
221
221
  executionMode: "sequential",
222
222
  parameters: CursorAskQuestionParamsSchema,
223
223
  promptGuidelines: [
224
- "Use cursor_ask_question only when running a Cursor model and user input would materially change the plan, scope, platform, or implementation path.",
225
- "Prefer cursor_ask_question with 2-4 concrete options instead of guessing when Cursor plan mode needs user choices.",
224
+ "Do not call cursor_ask_question unless the user explicitly asked to be prompted or to choose among options.",
225
+ "If this tool is available, prefer a reasonable default and state the assumption instead of blocking on a questionnaire.",
226
226
  ],
227
227
  async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
228
228
  const questions = normalizeQuestions(params as CursorAskQuestionParams);
@@ -0,0 +1,79 @@
1
+ import { createHash } from "node:crypto";
2
+ import { convertToLlm, type ExtensionContext } from "@earendil-works/pi-coding-agent";
3
+ import type { Api, Context, Model } from "@earendil-works/pi-ai";
4
+
5
+ export interface CursorRequestProvenance {
6
+ readonly purpose: "normal" | "compaction" | "tree";
7
+ readonly occupancyFloor?: number;
8
+ /** Canonical native source roles in converted conversation order, only for an equivalent request. */
9
+ readonly nativeSourceRoles?: readonly string[];
10
+ }
11
+
12
+ interface Measurement {
13
+ readonly api: string;
14
+ readonly provider: string;
15
+ readonly model: string;
16
+ readonly tokens: number;
17
+ }
18
+
19
+ /** Receipt data contains hashes and source-role/accounting scalars only, never conversation text. */
20
+ export interface CursorRequestProjectionSnapshot {
21
+ readonly digest: string;
22
+ readonly measurements: readonly Measurement[];
23
+ readonly nativeSourceRoles: readonly string[];
24
+ }
25
+
26
+ function projectionDigest(messages: readonly unknown[]): string {
27
+ const hash = createHash("sha256");
28
+ for (const message of messages) {
29
+ // Stable value equivalence survives Pi's cloning and property insertion order.
30
+ hash.update(JSON.stringify(message, (_key, value: unknown) => {
31
+ if (!value || typeof value !== "object" || Array.isArray(value)) return value;
32
+ return Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)));
33
+ }));
34
+ hash.update("\n");
35
+ }
36
+ return hash.digest("hex");
37
+ }
38
+
39
+ export function captureCursorRequestProjection(manager: ExtensionContext["sessionManager"]): CursorRequestProjectionSnapshot {
40
+ const branch = manager.getBranch();
41
+ const projection = manager.buildSessionProjection();
42
+ const order = new Map(branch.map((entry, index) => [entry.id, index]));
43
+ const boundary = branch.findLastIndex((entry) => entry.type === "compaction" || entry.type === "context_edit");
44
+ const measurements: Measurement[] = [];
45
+ // Raw branch chronology, not projected order or clocks, determines freshness.
46
+ for (const entry of [...projection.entries].sort((a, b) => (order.get(a.sourceEntry.id) ?? -1) - (order.get(b.sourceEntry.id) ?? -1))) {
47
+ if ((order.get(entry.sourceEntry.id) ?? -1) <= boundary) continue;
48
+ for (const message of entry.messages) {
49
+ if (message.role !== "assistant" || message.stopReason === "error" || message.stopReason === "aborted") continue;
50
+ const tokens = message.usage.totalTokens;
51
+ if (!Number.isFinite(tokens) || tokens <= 0) continue;
52
+ measurements.push(Object.freeze({ api: message.api, provider: message.provider, model: message.model, tokens }));
53
+ }
54
+ }
55
+ const nativeSourceRoles = projection.messages.flatMap((message) =>
56
+ message.role === "system" ? [] : convertToLlm([message]).map(() => message.role));
57
+ return Object.freeze({
58
+ digest: projectionDigest(convertToLlm(projection.messages)),
59
+ measurements: Object.freeze(measurements),
60
+ nativeSourceRoles: Object.freeze(nativeSourceRoles),
61
+ });
62
+ }
63
+
64
+ export function resolveCursorRequestProvenance(
65
+ snapshot: CursorRequestProjectionSnapshot,
66
+ model: Model<Api>,
67
+ context: Context,
68
+ purpose: CursorRequestProvenance["purpose"],
69
+ ): CursorRequestProvenance {
70
+ // ponytail: canonical native origin only. Unmatched transforms stay conservative;
71
+ // upgrade if Pi exposes final request-bound source provenance.
72
+ if (purpose !== "normal" || snapshot.digest !== projectionDigest(context.messages)) return Object.freeze({ purpose });
73
+ const measurement = snapshot.measurements.findLast((item) => item.api === model.api && item.provider === model.provider && item.model === model.id && item.tokens <= model.contextWindow);
74
+ return Object.freeze({
75
+ purpose,
76
+ nativeSourceRoles: snapshot.nativeSourceRoles,
77
+ ...(measurement ? { occupancyFloor: measurement.tokens } : {}),
78
+ });
79
+ }
@@ -4,16 +4,26 @@ import { dirname, isAbsolute, join } from "node:path";
4
4
 
5
5
  const RIPGREP_ENV = "CURSOR_RIPGREP_PATH";
6
6
 
7
- export function resolveBundledCursorRipgrepPath(
7
+ export function resolveCursorSdkPlatformPackageDirectory(
8
8
  fromModuleUrl: string | URL = import.meta.url,
9
9
  ): string | undefined {
10
10
  try {
11
11
  const require = createRequire(fromModuleUrl);
12
- const platformPackage = `@cursor/sdk-${process.platform}-${process.arch}`;
13
12
  const sdkEntry = require.resolve("@cursor/sdk");
14
- const packageDirectory = dirname(
15
- require.resolve(`${platformPackage}/package.json`, { paths: [dirname(sdkEntry)] }),
16
- );
13
+ return dirname(require.resolve(`@cursor/sdk-${process.platform}-${process.arch}/package.json`, {
14
+ paths: [dirname(sdkEntry)],
15
+ }));
16
+ } catch {
17
+ return undefined;
18
+ }
19
+ }
20
+
21
+ export function resolveBundledCursorRipgrepPath(
22
+ fromModuleUrl: string | URL = import.meta.url,
23
+ ): string | undefined {
24
+ const packageDirectory = resolveCursorSdkPlatformPackageDirectory(fromModuleUrl);
25
+ if (!packageDirectory) return undefined;
26
+ try {
17
27
  const ripgrepPath = join(packageDirectory, "bin", process.platform === "win32" ? "rg.exe" : "rg");
18
28
  accessSync(ripgrepPath, constants.X_OK);
19
29
  return ripgrepPath;