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.
- package/CHANGELOG.md +80 -0
- package/README.md +169 -37
- package/dist/context-window-cache.js +0 -6
- package/dist/context.js +61 -34
- package/dist/cursor-api-key.js +34 -19
- package/dist/cursor-cloud-lifecycle.js +122 -98
- package/dist/cursor-cloud-options.js +1 -0
- package/dist/cursor-config.js +59 -0
- package/dist/cursor-custom-store-path.js +177 -0
- package/dist/cursor-custom-subagent-definitions.js +14 -0
- package/dist/cursor-durable-fs.js +97 -3
- package/dist/cursor-fallback-models.generated.js +288 -1
- package/dist/cursor-fallback-warning.js +10 -4
- package/dist/cursor-http1.js +8 -8
- package/dist/cursor-live-run-coordinator.js +31 -15
- package/dist/cursor-mcp-timeout-override.js +3 -1
- package/dist/cursor-native-replay-routing.js +1 -1
- package/dist/cursor-native-tool-display-registration.js +46 -22
- package/dist/cursor-native-tool-display-state.js +57 -22
- package/dist/cursor-native-tool-display-tools.js +5 -6
- package/dist/cursor-pi-tool-bridge-constants.js +23 -2
- package/dist/cursor-pi-tool-bridge-run.js +28 -3
- package/dist/cursor-pi-tool-bridge-server.js +1 -1
- package/dist/cursor-pi-tool-bridge-snapshot.js +1 -1
- package/dist/cursor-pi-tool-bridge.js +31 -9
- package/dist/cursor-provider-binding.js +118 -0
- package/dist/cursor-provider-errors.js +61 -33
- package/dist/cursor-provider-lazy.js +23 -11
- package/dist/cursor-provider-live-run-drain.js +25 -16
- package/dist/cursor-provider-run-finalizer.js +21 -9
- package/dist/cursor-provider-turn-coordinator.js +1 -0
- package/dist/cursor-provider-turn-display-router.js +4 -0
- package/dist/cursor-provider-turn-emit.js +1 -0
- package/dist/cursor-provider-turn-finalize.js +29 -20
- package/dist/cursor-provider-turn-prepare.js +49 -20
- package/dist/cursor-provider-turn-runner.js +37 -11
- package/dist/cursor-provider-turn-send.js +22 -9
- package/dist/cursor-provider-turn-summary.js +89 -0
- package/dist/cursor-provider-turn-tool-ledger.js +13 -7
- package/dist/cursor-provider.js +10 -3
- package/dist/cursor-question-tool.js +5 -5
- package/dist/cursor-request-provenance.js +53 -0
- package/dist/cursor-ripgrep-path.js +14 -3
- package/dist/cursor-runtime-state.js +50 -43
- package/dist/cursor-sdk-billed-usage.js +54 -75
- package/dist/cursor-sdk-event-debug-session.js +5 -6
- package/dist/cursor-sdk-event-debug.js +9 -6
- package/dist/cursor-sdk-output-filter.js +1 -1
- package/dist/cursor-sdk-process-error-guard.js +9 -10
- package/dist/cursor-sdk-runtime.js +13 -1
- package/dist/cursor-sdk-vendor-env.js +20 -0
- package/dist/cursor-session-agent-cleanup.js +31 -28
- package/dist/cursor-session-agent-lifecycle.js +18 -9
- package/dist/cursor-session-agent-lineage.js +28 -12
- package/dist/cursor-session-agent-resume.js +51 -35
- package/dist/cursor-session-agent.js +47 -25
- package/dist/cursor-session-compaction-prep.js +2 -7
- package/dist/cursor-session-scope.js +71 -39
- package/dist/cursor-session-send-policy.js +2 -2
- package/dist/cursor-session-settings.js +61 -0
- package/dist/cursor-session-store.js +235 -45
- package/dist/cursor-skill-tool.js +32 -49
- package/dist/cursor-state.js +78 -65
- package/dist/cursor-tool-manifest.js +1 -1
- package/dist/cursor-usage-accounting.js +13 -70
- package/dist/cursor-usage-command.js +89 -0
- package/dist/cursor-usage-ledger.js +512 -0
- package/dist/index.js +29 -35
- package/dist/model-discovery.js +62 -37
- package/dist/model-list-cache.js +12 -1
- package/docs/cursor-dogfood-checklist.md +3 -3
- package/docs/cursor-live-smoke-checklist.md +15 -15
- package/docs/cursor-model-ux-spec.md +124 -39
- package/docs/cursor-native-tool-replay.md +18 -8
- package/docs/cursor-native-tool-visual-audit.md +8 -8
- package/docs/cursor-testing-lessons.md +87 -25
- package/docs/cursor-tool-surfaces.md +4 -4
- package/docs/platform-smoke-implementation.md +10 -6
- package/docs/platform-smoke.md +35 -46
- package/node_modules/@hono/node-server/README.md +21 -10
- package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
- package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
- package/node_modules/@hono/node-server/dist/index.cjs +41 -19
- package/node_modules/@hono/node-server/dist/index.mjs +42 -20
- package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
- package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
- package/node_modules/@hono/node-server/package.json +3 -2
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/package.json +2 -2
- package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
- package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
- package/node_modules/@modelcontextprotocol/server/README.md +1 -7
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
- package/node_modules/@modelcontextprotocol/server/package.json +4 -4
- package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
- package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
- package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
- package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
- package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
- package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
- package/node_modules/hono/dist/adapter/bun/index.js +3 -13
- package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
- package/node_modules/hono/dist/adapter/bun/server.js +11 -5
- package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
- package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
- package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
- package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
- package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
- package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
- package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
- package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
- package/node_modules/hono/dist/adapter/deno/index.js +3 -10
- package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
- package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
- package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
- package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
- package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
- package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
- package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
- package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
- package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
- package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
- package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
- package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
- package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
- package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
- package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
- package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
- package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
- package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
- package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
- package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
- package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
- package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
- package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
- package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
- package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
- package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
- package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
- package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
- package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
- package/node_modules/hono/dist/cjs/client/client.js +139 -212
- package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
- package/node_modules/hono/dist/cjs/client/index.js +7 -32
- package/node_modules/hono/dist/cjs/client/types.js +0 -15
- package/node_modules/hono/dist/cjs/client/utils.js +54 -92
- package/node_modules/hono/dist/cjs/compose.js +49 -66
- package/node_modules/hono/dist/cjs/context.js +379 -450
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
- package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
- package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
- package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
- package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
- package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
- package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
- package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
- package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
- package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
- package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
- package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
- package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
- package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
- package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
- package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
- package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
- package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
- package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
- package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
- package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
- package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
- package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
- package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
- package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
- package/node_modules/hono/dist/cjs/hono-base.js +347 -403
- package/node_modules/hono/dist/cjs/hono.js +28 -42
- package/node_modules/hono/dist/cjs/http-exception.js +55 -56
- package/node_modules/hono/dist/cjs/index.js +22 -30
- package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
- package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
- package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
- package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
- package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
- package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
- package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
- package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
- package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
- package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
- package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
- package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
- package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
- package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
- package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
- package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
- package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
- package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
- package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
- package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
- package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
- package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
- package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
- package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
- package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
- package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
- package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
- package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
- package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
- package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
- package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
- package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
- package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
- package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
- package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
- package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
- package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
- package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
- package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
- package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
- package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
- package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
- package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
- package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
- package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
- package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
- package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
- package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
- package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
- package/node_modules/hono/dist/cjs/request/constants.js +5 -27
- package/node_modules/hono/dist/cjs/request.js +334 -346
- package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
- package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
- package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
- package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
- package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
- package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
- package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
- package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
- package/node_modules/hono/dist/cjs/router/utils.js +5 -27
- package/node_modules/hono/dist/cjs/router.js +37 -37
- package/node_modules/hono/dist/cjs/types.js +5 -28
- package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
- package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
- package/node_modules/hono/dist/cjs/utils/body.js +84 -110
- package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
- package/node_modules/hono/dist/cjs/utils/color.js +35 -44
- package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
- package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
- package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
- package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
- package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
- package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
- package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
- package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
- package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
- package/node_modules/hono/dist/cjs/utils/html.js +96 -137
- package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
- package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
- package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
- package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
- package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
- package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
- package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
- package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
- package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
- package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
- package/node_modules/hono/dist/cjs/utils/types.js +0 -15
- package/node_modules/hono/dist/cjs/utils/url.js +185 -234
- package/node_modules/hono/dist/cjs/validator/index.js +3 -27
- package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
- package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
- package/node_modules/hono/dist/client/client.js +138 -197
- package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
- package/node_modules/hono/dist/client/index.js +3 -7
- package/node_modules/hono/dist/client/types.js +1 -0
- package/node_modules/hono/dist/client/utils.js +51 -68
- package/node_modules/hono/dist/compose.js +49 -45
- package/node_modules/hono/dist/context.js +376 -426
- package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
- package/node_modules/hono/dist/helper/accepts/index.js +1 -4
- package/node_modules/hono/dist/helper/adapter/index.js +33 -52
- package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
- package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
- package/node_modules/hono/dist/helper/cookie/index.js +74 -94
- package/node_modules/hono/dist/helper/css/common.js +167 -225
- package/node_modules/hono/dist/helper/css/index.js +132 -137
- package/node_modules/hono/dist/helper/dev/index.js +44 -49
- package/node_modules/hono/dist/helper/factory/index.js +27 -27
- package/node_modules/hono/dist/helper/html/index.js +30 -39
- package/node_modules/hono/dist/helper/proxy/index.js +116 -88
- package/node_modules/hono/dist/helper/route/index.js +121 -43
- package/node_modules/hono/dist/helper/ssg/index.js +3 -18
- package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
- package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
- package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
- package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
- package/node_modules/hono/dist/helper/streaming/index.js +2 -8
- package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
- package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
- package/node_modules/hono/dist/helper/streaming/text.js +9 -10
- package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
- package/node_modules/hono/dist/helper/testing/index.js +16 -10
- package/node_modules/hono/dist/helper/websocket/index.js +49 -53
- package/node_modules/hono/dist/hono-base.js +344 -379
- package/node_modules/hono/dist/hono.js +27 -20
- package/node_modules/hono/dist/http-exception.js +53 -33
- package/node_modules/hono/dist/index.js +19 -6
- package/node_modules/hono/dist/jsx/base.js +231 -340
- package/node_modules/hono/dist/jsx/children.js +16 -20
- package/node_modules/hono/dist/jsx/components.js +118 -170
- package/node_modules/hono/dist/jsx/constants.js +9 -15
- package/node_modules/hono/dist/jsx/context.js +153 -150
- package/node_modules/hono/dist/jsx/dom/client.js +45 -48
- package/node_modules/hono/dist/jsx/dom/components.js +21 -29
- package/node_modules/hono/dist/jsx/dom/context.js +37 -44
- package/node_modules/hono/dist/jsx/dom/css.js +142 -147
- package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
- package/node_modules/hono/dist/jsx/dom/index.js +71 -134
- package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
- package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
- package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
- package/node_modules/hono/dist/jsx/dom/render.js +492 -631
- package/node_modules/hono/dist/jsx/dom/server.js +32 -32
- package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
- package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
- package/node_modules/hono/dist/jsx/index.js +45 -98
- package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
- package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
- package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
- package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
- package/node_modules/hono/dist/jsx/streaming.js +120 -142
- package/node_modules/hono/dist/jsx/types.js +1 -0
- package/node_modules/hono/dist/jsx/utils.js +105 -168
- package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
- package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
- package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
- package/node_modules/hono/dist/middleware/cache/index.js +165 -190
- package/node_modules/hono/dist/middleware/combine/index.js +134 -73
- package/node_modules/hono/dist/middleware/compress/index.js +75 -69
- package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
- package/node_modules/hono/dist/middleware/cors/index.js +107 -86
- package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
- package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
- package/node_modules/hono/dist/middleware/etag/index.js +71 -70
- package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
- package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
- package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
- package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
- package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
- package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
- package/node_modules/hono/dist/middleware/language/index.js +2 -15
- package/node_modules/hono/dist/middleware/language/language.js +180 -157
- package/node_modules/hono/dist/middleware/logger/index.js +43 -37
- package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
- package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
- package/node_modules/hono/dist/middleware/mount/index.js +70 -0
- package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
- package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
- package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
- package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
- package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
- package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
- package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
- package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
- package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
- package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
- package/node_modules/hono/dist/middleware/timing/index.js +2 -9
- package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
- package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
- package/node_modules/hono/dist/preset/quick.js +17 -15
- package/node_modules/hono/dist/preset/tiny.js +14 -11
- package/node_modules/hono/dist/request/constants.js +4 -5
- package/node_modules/hono/dist/request.js +328 -319
- package/node_modules/hono/dist/router/linear-router/index.js +1 -4
- package/node_modules/hono/dist/router/linear-router/router.js +93 -120
- package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
- package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
- package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
- package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
- package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
- package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
- package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
- package/node_modules/hono/dist/router/smart-router/index.js +1 -4
- package/node_modules/hono/dist/router/smart-router/router.js +46 -55
- package/node_modules/hono/dist/router/trie-router/index.js +1 -4
- package/node_modules/hono/dist/router/trie-router/node.js +131 -162
- package/node_modules/hono/dist/router/trie-router/router.js +11 -14
- package/node_modules/hono/dist/router/utils.js +4 -5
- package/node_modules/hono/dist/router.js +35 -14
- package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
- package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
- package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
- package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
- package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
- package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
- package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
- package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
- package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
- package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
- package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
- package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
- package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
- package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
- package/node_modules/hono/dist/types/client/client.d.ts +5 -3
- package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
- package/node_modules/hono/dist/types/client/index.d.ts +5 -7
- package/node_modules/hono/dist/types/client/types.d.ts +134 -159
- package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
- package/node_modules/hono/dist/types/compose.d.ts +4 -2
- package/node_modules/hono/dist/types/context.d.ts +335 -335
- package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
- package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
- package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
- package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
- package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
- package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
- package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
- package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
- package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
- package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
- package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
- package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
- package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
- package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
- package/node_modules/hono/dist/types/hono.d.ts +11 -10
- package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
- package/node_modules/hono/dist/types/index.d.ts +6 -37
- package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
- package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
- package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
- package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
- package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
- package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
- package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
- package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
- package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
- package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
- package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
- package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
- package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
- package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
- package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
- package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
- package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
- package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
- package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
- package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
- package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
- package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
- package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
- package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
- package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
- package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
- package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
- package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
- package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
- package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
- package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
- package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
- package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
- package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
- package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
- package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
- package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
- package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
- package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
- package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
- package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
- package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
- package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
- package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
- package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
- package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/request.d.ts +288 -286
- package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
- package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
- package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
- package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
- package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
- package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/router.d.ts +23 -22
- package/node_modules/hono/dist/types/types.d.ts +146 -505
- package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
- package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
- package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
- package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
- package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
- package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
- package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
- package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
- package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
- package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
- package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
- package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
- package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
- package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
- package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
- package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
- package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
- package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
- package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
- package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
- package/node_modules/hono/dist/types.js +4 -6
- package/node_modules/hono/dist/utils/accept.js +185 -212
- package/node_modules/hono/dist/utils/basic-auth.js +18 -21
- package/node_modules/hono/dist/utils/body.js +87 -92
- package/node_modules/hono/dist/utils/buffer.js +44 -71
- package/node_modules/hono/dist/utils/color.js +33 -21
- package/node_modules/hono/dist/utils/compress.js +11 -5
- package/node_modules/hono/dist/utils/concurrent.js +29 -38
- package/node_modules/hono/dist/utils/constants.js +7 -5
- package/node_modules/hono/dist/utils/cookie.js +114 -163
- package/node_modules/hono/dist/utils/crypto.js +30 -40
- package/node_modules/hono/dist/utils/encode.js +30 -26
- package/node_modules/hono/dist/utils/filepath.js +23 -33
- package/node_modules/hono/dist/utils/handler.js +10 -11
- package/node_modules/hono/dist/utils/headers.js +1 -0
- package/node_modules/hono/dist/utils/html.js +97 -117
- package/node_modules/hono/dist/utils/http-status.js +1 -0
- package/node_modules/hono/dist/utils/ipaddr.js +227 -279
- package/node_modules/hono/dist/utils/jwt/index.js +12 -4
- package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
- package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
- package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
- package/node_modules/hono/dist/utils/jwt/types.js +79 -95
- package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
- package/node_modules/hono/dist/utils/mime.js +74 -79
- package/node_modules/hono/dist/utils/stream.js +86 -88
- package/node_modules/hono/dist/utils/types.js +1 -0
- package/node_modules/hono/dist/utils/url.js +187 -215
- package/node_modules/hono/dist/validator/index.js +1 -4
- package/node_modules/hono/dist/validator/utils.js +1 -0
- package/node_modules/hono/dist/validator/validator.js +61 -83
- package/node_modules/hono/package.json +35 -27
- package/package.json +16 -14
- package/scripts/cloud-runtime-smoke.mjs +4 -2
- package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
- package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
- package/scripts/local-resume-smoke.mjs +1 -1
- package/scripts/platform-smoke/artifacts.mjs +7 -1
- package/scripts/platform-smoke/card-detect.mjs +2 -8
- package/scripts/platform-smoke/targets.mjs +8 -15
- package/scripts/platform-smoke/visual-evidence.mjs +7 -2
- package/scripts/tmux-live-smoke.sh +57 -90
- package/shared/cursor-sdk-output-filter.d.mts +3 -0
- package/shared/cursor-sdk-output-filter.mjs +117 -44
- package/src/context-window-cache.ts +0 -6
- package/src/context.ts +65 -33
- package/src/cursor-api-key.ts +37 -17
- package/src/cursor-cloud-lifecycle.ts +124 -98
- package/src/cursor-cloud-options.ts +2 -0
- package/src/cursor-config.ts +76 -0
- package/src/cursor-custom-store-path.ts +151 -0
- package/src/cursor-custom-subagent-definitions.ts +21 -0
- package/src/cursor-durable-fs.ts +65 -3
- package/src/cursor-fallback-models.generated.ts +288 -1
- package/src/cursor-fallback-warning.ts +9 -5
- package/src/cursor-http1.ts +8 -8
- package/src/cursor-live-run-coordinator.ts +33 -15
- package/src/cursor-mcp-timeout-override.ts +3 -1
- package/src/cursor-native-replay-routing.ts +2 -1
- package/src/cursor-native-tool-display-registration.ts +48 -24
- package/src/cursor-native-tool-display-state.ts +65 -21
- package/src/cursor-native-tool-display-tools.ts +7 -4
- package/src/cursor-pi-tool-bridge-constants.ts +27 -2
- package/src/cursor-pi-tool-bridge-run.ts +32 -3
- package/src/cursor-pi-tool-bridge-server.ts +1 -2
- package/src/cursor-pi-tool-bridge-snapshot.ts +1 -1
- package/src/cursor-pi-tool-bridge-types.ts +3 -0
- package/src/cursor-pi-tool-bridge.ts +26 -9
- package/src/cursor-provider-binding.ts +121 -0
- package/src/cursor-provider-errors.ts +59 -35
- package/src/cursor-provider-lazy.ts +21 -15
- package/src/cursor-provider-live-run-drain.ts +29 -17
- package/src/cursor-provider-run-finalizer.ts +26 -16
- package/src/cursor-provider-turn-coordinator.ts +2 -0
- package/src/cursor-provider-turn-display-router.ts +5 -0
- package/src/cursor-provider-turn-emit.ts +3 -1
- package/src/cursor-provider-turn-finalize.ts +38 -23
- package/src/cursor-provider-turn-prepare.ts +51 -27
- package/src/cursor-provider-turn-runner.ts +40 -13
- package/src/cursor-provider-turn-send.ts +23 -15
- package/src/cursor-provider-turn-summary.ts +94 -0
- package/src/cursor-provider-turn-tool-ledger.ts +12 -7
- package/src/cursor-provider-turn-types.ts +37 -4
- package/src/cursor-provider.ts +28 -4
- package/src/cursor-question-tool.ts +5 -5
- package/src/cursor-request-provenance.ts +79 -0
- package/src/cursor-ripgrep-path.ts +15 -5
- package/src/cursor-runtime-state.ts +53 -48
- package/src/cursor-sdk-billed-usage.ts +54 -102
- package/src/cursor-sdk-event-debug-session.ts +5 -5
- package/src/cursor-sdk-event-debug.ts +10 -6
- package/src/cursor-sdk-output-filter.ts +2 -0
- package/src/cursor-sdk-process-error-guard.ts +8 -9
- package/src/cursor-sdk-runtime.ts +15 -2
- package/src/cursor-sdk-vendor-env.ts +22 -0
- package/src/cursor-session-agent-cleanup.ts +30 -29
- package/src/cursor-session-agent-lifecycle.ts +14 -9
- package/src/cursor-session-agent-lineage.ts +26 -12
- package/src/cursor-session-agent-resume.ts +49 -36
- package/src/cursor-session-agent.ts +57 -27
- package/src/cursor-session-compaction-prep.ts +2 -7
- package/src/cursor-session-scope.ts +87 -39
- package/src/cursor-session-send-policy.ts +2 -2
- package/src/cursor-session-settings.ts +72 -0
- package/src/cursor-session-store.ts +259 -53
- package/src/cursor-skill-tool.ts +37 -61
- package/src/cursor-state.ts +81 -69
- package/src/cursor-tool-manifest.ts +1 -1
- package/src/cursor-usage-accounting.ts +17 -82
- package/src/cursor-usage-command.ts +76 -0
- package/src/cursor-usage-ledger.ts +500 -0
- package/src/index.ts +30 -39
- package/src/model-discovery.ts +76 -45
- package/src/model-list-cache.ts +11 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
|
@@ -60,6 +60,9 @@ export interface CursorPiToolBridgeRun {
|
|
|
60
60
|
resolveToolResults(toolResults: readonly ToolResultMessage[]): Promise<void>;
|
|
61
61
|
resolveToolResultsFromContext(context: Context): Promise<void>;
|
|
62
62
|
hasPendingPiToolCallId(piToolCallId: string): boolean;
|
|
63
|
+
hasPendingToolCalls(): boolean;
|
|
64
|
+
/** Synchronous changes; observer errors cannot affect settlement. Returns an idempotent unsubscribe. */
|
|
65
|
+
onPendingToolCallsChanged(listener: () => void): () => void;
|
|
63
66
|
isBridgeMcpToolCall(toolCall: unknown): boolean;
|
|
64
67
|
setOnToolRequest(handler?: (request: CursorPiBridgeToolRequest) => void): void;
|
|
65
68
|
setDebugRecorder(recorder?: CursorSdkEventDebugRecorder): void;
|
|
@@ -46,6 +46,8 @@ export {
|
|
|
46
46
|
buildCursorPiToolBridgeSurfaceSignature,
|
|
47
47
|
} from "./cursor-pi-tool-bridge-snapshot.js";
|
|
48
48
|
|
|
49
|
+
const bridges = new Map<object, CursorPiToolBridgeRegistry>();
|
|
50
|
+
const activeCallsByPi = new Map<object, Set<string>>();
|
|
49
51
|
let registeredCursorPiToolBridge: CursorPiToolBridgeRegistry | undefined;
|
|
50
52
|
|
|
51
53
|
const WINDOWS_BRIDGE_ABORT_ENV = "PI_CURSOR_BRIDGE_TOOL_CALL_ID";
|
|
@@ -89,17 +91,25 @@ Get-CimInstance Win32_Process -Filter "Name = 'bash.exe' OR Name = 'sh.exe'" |
|
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
export function registerCursorPiToolBridge(pi: CursorPiToolBridgeExtensionApi): CursorPiToolBridge {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
+
const previous = bridges.get(pi);
|
|
95
|
+
if (previous) {
|
|
96
|
+
const reason = "Cursor pi tool bridge extension reloaded";
|
|
97
|
+
for (const id of activeCallsByPi.get(pi) ?? []) bridgeToolExecutionAbortTracker.abort(id, reason);
|
|
98
|
+
void previous.disposeAll(reason);
|
|
99
|
+
}
|
|
94
100
|
const bridge = new CursorPiToolBridgeRegistry(pi);
|
|
95
101
|
registeredCursorPiToolBridge = bridge;
|
|
102
|
+
bridges.set(pi, bridge);
|
|
103
|
+
const activeCalls = new Set<string>();
|
|
104
|
+
activeCallsByPi.set(pi, activeCalls);
|
|
96
105
|
pi.on("tool_call", (event, ctx) => {
|
|
97
|
-
if (
|
|
106
|
+
if (bridges.get(pi) !== bridge) return undefined;
|
|
98
107
|
if (!bridge.hasPendingPiToolCallId(event.toolCallId)) {
|
|
99
108
|
return isCursorPiBridgeToolCallId(event.toolCallId)
|
|
100
109
|
? { block: true, reason: "Cursor pi bridge tool call is no longer pending" }
|
|
101
110
|
: undefined;
|
|
102
111
|
}
|
|
112
|
+
activeCalls.add(event.toolCallId);
|
|
103
113
|
const windowsAbortMarker = installWindowsBridgeBashAbortMarker(event);
|
|
104
114
|
const trackingStarted = bridgeToolExecutionAbortTracker.track(event.toolCallId, {
|
|
105
115
|
signal: ctx.signal,
|
|
@@ -115,18 +125,23 @@ export function registerCursorPiToolBridge(pi: CursorPiToolBridgeExtensionApi):
|
|
|
115
125
|
return { block: true, reason: "Cursor pi bridge tool execution was aborted before it started" };
|
|
116
126
|
});
|
|
117
127
|
pi.on("tool_result", (event) => {
|
|
118
|
-
bridgeToolExecutionAbortTracker.finish(event.toolCallId);
|
|
128
|
+
if (activeCalls.delete(event.toolCallId)) bridgeToolExecutionAbortTracker.finish(event.toolCallId);
|
|
119
129
|
});
|
|
120
130
|
pi.on("session_shutdown", async (event) => {
|
|
131
|
+
if (bridges.get(pi) !== bridge) return;
|
|
121
132
|
const reason = `Cursor pi tool bridge session shutdown: ${event.reason}`;
|
|
122
|
-
bridgeToolExecutionAbortTracker.
|
|
133
|
+
for (const id of activeCalls) bridgeToolExecutionAbortTracker.abort(id, reason);
|
|
134
|
+
activeCalls.clear();
|
|
135
|
+
bridges.delete(pi);
|
|
136
|
+
activeCallsByPi.delete(pi);
|
|
137
|
+
if (registeredCursorPiToolBridge === bridge) registeredCursorPiToolBridge = [...bridges.values()].at(-1);
|
|
123
138
|
await bridge.disposeAll(reason);
|
|
124
139
|
});
|
|
125
140
|
return bridge;
|
|
126
141
|
}
|
|
127
142
|
|
|
128
|
-
export function getRegisteredCursorPiToolBridge(): CursorPiToolBridge | undefined {
|
|
129
|
-
return registeredCursorPiToolBridge;
|
|
143
|
+
export function getRegisteredCursorPiToolBridge(pi?: object): CursorPiToolBridge | undefined {
|
|
144
|
+
return pi ? bridges.get(pi) : registeredCursorPiToolBridge;
|
|
130
145
|
}
|
|
131
146
|
|
|
132
147
|
export const __testUtils = {
|
|
@@ -159,8 +174,10 @@ export const __testUtils = {
|
|
|
159
174
|
},
|
|
160
175
|
resetRegisteredBridgeForTests() {
|
|
161
176
|
bridgeToolExecutionAbortTracker.abortAll("Cursor pi tool bridge test reset");
|
|
162
|
-
const
|
|
177
|
+
const registered = [...bridges.values()];
|
|
178
|
+
bridges.clear();
|
|
179
|
+
activeCallsByPi.clear();
|
|
163
180
|
registeredCursorPiToolBridge = undefined;
|
|
164
|
-
return bridge
|
|
181
|
+
return Promise.all(registered.map((bridge) => bridge.disposeAll("Cursor pi tool bridge test reset")));
|
|
165
182
|
},
|
|
166
183
|
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { Model, Provider } from "@earendil-works/pi-ai";
|
|
3
|
+
import { cursorApiKeyAuth, normalizeCursorApiKey, resolveCursorCredentialApiKey } from "./cursor-api-key.js";
|
|
4
|
+
import { discoverModels, type CursorModelFallbackIssue } from "./model-discovery.js";
|
|
5
|
+
import { clearModelListCache } from "./model-list-cache.js";
|
|
6
|
+
import { captureCursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
|
|
7
|
+
import { captureCursorUsageRecorder, type CursorUsageRecorder } from "./cursor-usage-ledger.js";
|
|
8
|
+
import { getCursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
|
|
9
|
+
import { getRegisteredCursorPiToolBridge } from "./cursor-pi-tool-bridge.js";
|
|
10
|
+
import { createCursorLazyStream } from "./cursor-provider-lazy.js";
|
|
11
|
+
import { getCursorSessionScopeSnapshot } from "./cursor-session-scope.js";
|
|
12
|
+
import { captureCursorRequestProjection, resolveCursorRequestProvenance, type CursorRequestProjectionSnapshot, type CursorRequestProvenance } from "./cursor-request-provenance.js";
|
|
13
|
+
import type { CursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
|
|
14
|
+
|
|
15
|
+
export const CURSOR_PROVIDER_OWNERSHIP_ERROR = "Cursor provider ownership is unavailable: this request does not belong to the active Cursor registration. Reload this session's extensions to restore its Cursor registration; use independent ModelRuntime instances for sibling sessions.";
|
|
16
|
+
interface ProviderBinding { active: boolean; closed: boolean }
|
|
17
|
+
interface RequestReceipt {
|
|
18
|
+
binding: ProviderBinding;
|
|
19
|
+
scope: ReturnType<typeof getCursorSessionScopeSnapshot>;
|
|
20
|
+
projection: CursorRequestProjectionSnapshot;
|
|
21
|
+
usageRecorder: CursorUsageRecorder;
|
|
22
|
+
reportSdkNotice: CursorSdkOutputNoticeHandler;
|
|
23
|
+
}
|
|
24
|
+
const requestOwners = new WeakMap<object, RequestReceipt>();
|
|
25
|
+
|
|
26
|
+
/** One closure per ExtensionAPI, including direct compaction/tree/bug-report streams. */
|
|
27
|
+
export function registerCursorProviderBinding(
|
|
28
|
+
pi: Pick<ExtensionAPI, "on" | "registerProvider" | "appendEntry">,
|
|
29
|
+
) {
|
|
30
|
+
const binding: ProviderBinding = { active: false, closed: false };
|
|
31
|
+
let registry: ExtensionContext["modelRegistry"] | undefined;
|
|
32
|
+
const operations = new WeakMap<AbortSignal, CursorRequestProvenance["purpose"]>();
|
|
33
|
+
pi.on("session_before_compact", (event) => { operations.set(event.signal, "compaction"); });
|
|
34
|
+
pi.on("session_before_tree", (event) => { operations.set(event.signal, "tree"); });
|
|
35
|
+
pi.on("before_provider_headers", (event, ctx) => {
|
|
36
|
+
const notices = new Set<string>();
|
|
37
|
+
// Pi's SDK supplies this session-owned callback for ordinary and auxiliary
|
|
38
|
+
// streams. ModelRuntime forwards the same real headers object to the provider.
|
|
39
|
+
requestOwners.set(event.headers, {
|
|
40
|
+
binding,
|
|
41
|
+
scope: getCursorSessionScopeSnapshot(pi),
|
|
42
|
+
projection: captureCursorRequestProjection(ctx.sessionManager),
|
|
43
|
+
usageRecorder: captureCursorUsageRecorder(pi, ctx),
|
|
44
|
+
reportSdkNotice: (kind, message) => {
|
|
45
|
+
if (!binding.active || binding.closed) return false;
|
|
46
|
+
if (notices.has(kind)) return;
|
|
47
|
+
pi.appendEntry("pi-cursor-sdk:capability-notice", { kind, message });
|
|
48
|
+
if (ctx.hasUI) ctx.ui.notify(message, "warning");
|
|
49
|
+
else console.warn(message);
|
|
50
|
+
notices.add(kind);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
const stream = createCursorLazyStream((model, context, options) => {
|
|
55
|
+
const headers = options?.headers;
|
|
56
|
+
const owner = headers && requestOwners.get(headers);
|
|
57
|
+
if (headers) requestOwners.delete(headers);
|
|
58
|
+
if (!binding.active || binding.closed) throw new Error("Cursor provider binding is not active. Bind this session's extensions, or reload the session after shutdown.");
|
|
59
|
+
if (!owner) throw new Error("Cursor provider ownership is unavailable: this call has no native session request receipt. Bare modelRegistry.streamSimple calls are unsupported for Cursor; use the owning AgentSession's stream path or an independent child AgentSession.");
|
|
60
|
+
if (owner.binding !== binding) throw new Error(CURSOR_PROVIDER_OWNERSHIP_ERROR);
|
|
61
|
+
return {
|
|
62
|
+
request: resolveCursorRequestProvenance(owner.projection, model, context, options?.signal && operations.get(options.signal) || "normal"),
|
|
63
|
+
usageRecorder: owner.usageRecorder,
|
|
64
|
+
scope: owner.scope,
|
|
65
|
+
bridge: getRegisteredCursorPiToolBridge(pi),
|
|
66
|
+
nativeDisplay: getCursorNativeToolDisplayState(pi),
|
|
67
|
+
recordCloudLifecycle: captureCursorCloudLifecycleRecorder(pi),
|
|
68
|
+
reportSdkNotice: owner.reportSdkNotice,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
72
|
+
if (binding.closed) return;
|
|
73
|
+
binding.active = true;
|
|
74
|
+
registry = ctx.modelRegistry;
|
|
75
|
+
// The genuine extension context supplies composed config auth; startup
|
|
76
|
+
// selection already has the known baseline, without reading a default store.
|
|
77
|
+
await registry.refresh({ providers: ["cursor"], allowNetwork: false });
|
|
78
|
+
});
|
|
79
|
+
pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; registry = undefined; });
|
|
80
|
+
return (models: Awaited<ReturnType<typeof discoverModels>>, onCatalog: (issue?: CursorModelFallbackIssue) => void) => {
|
|
81
|
+
if (binding.closed) return;
|
|
82
|
+
const toNative = (definitions: typeof models): Model<"cursor-sdk">[] =>
|
|
83
|
+
definitions.map(({ compat: _compat, ...definition }) => ({
|
|
84
|
+
...definition, provider: "cursor", api: "cursor-sdk", baseUrl: "https://cursor.com",
|
|
85
|
+
}));
|
|
86
|
+
let current = toNative(models);
|
|
87
|
+
const provider: Provider<"cursor-sdk"> = {
|
|
88
|
+
id: "cursor", name: "Cursor", baseUrl: "https://cursor.com",
|
|
89
|
+
auth: { apiKey: cursorApiKeyAuth() },
|
|
90
|
+
getModels: () => current,
|
|
91
|
+
stream: stream,
|
|
92
|
+
streamSimple: stream,
|
|
93
|
+
async refreshModels(context) {
|
|
94
|
+
if (binding.closed) return;
|
|
95
|
+
const resolved = await registry?.getProviderAuth("cursor");
|
|
96
|
+
context.signal.throwIfAborted();
|
|
97
|
+
const credential = context.credential;
|
|
98
|
+
const apiKey = registry
|
|
99
|
+
? normalizeCursorApiKey(resolved?.auth.apiKey)
|
|
100
|
+
: credential && credential.type !== "api_key" ? undefined
|
|
101
|
+
: await resolveCursorCredentialApiKey(credential, async () => process.env.CURSOR_API_KEY);
|
|
102
|
+
let issue: CursorModelFallbackIssue | undefined;
|
|
103
|
+
await discoverModels({
|
|
104
|
+
apiKey, allowNetwork: context.allowNetwork, forceRefresh: context.force, signal: context.signal,
|
|
105
|
+
onFallback: (next) => { issue = next; },
|
|
106
|
+
publish: (definitions, update) => context.publish({
|
|
107
|
+
update: () => {
|
|
108
|
+
if (binding.closed) return;
|
|
109
|
+
update();
|
|
110
|
+
current = toNative(definitions);
|
|
111
|
+
// Do not infer logout before native composed auth is reachable.
|
|
112
|
+
if (registry && !apiKey) clearModelListCache();
|
|
113
|
+
onCatalog(issue);
|
|
114
|
+
},
|
|
115
|
+
}),
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
pi.registerProvider(provider);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -6,14 +6,14 @@ import { scrubSensitiveText } from "./cursor-sensitive-text.js";
|
|
|
6
6
|
export const MISSING_CURSOR_API_KEY_MESSAGE =
|
|
7
7
|
"Cursor SDK runs require a Cursor SDK API key. Cursor Agent CLI/Desktop login is not reused. Run /login -> Use an API key -> Cursor, set CURSOR_API_KEY before starting pi, or restart pi with --api-key.";
|
|
8
8
|
const GENERIC_CURSOR_SDK_ERROR_MESSAGE =
|
|
9
|
-
"Cursor SDK request failed
|
|
9
|
+
"Cursor SDK request failed without further error details.";
|
|
10
10
|
const AUTH_CURSOR_SDK_ERROR_MESSAGE =
|
|
11
11
|
"Cursor SDK request failed because the Cursor SDK API key may be invalid or unauthorized. Cursor Agent CLI/Desktop login is not reused. Run /login -> Use an API key -> Cursor, verify CURSOR_API_KEY, or pass --api-key, then retry.";
|
|
12
12
|
const CLOUD_AUTH_CURSOR_SDK_ERROR_MESSAGE =
|
|
13
13
|
"Cursor Cloud Agents request failed because Cloud API authentication rejected the API key. Use a user API key from Cursor Dashboard -> API Keys or a service account API key from Team settings; Team Admin API keys are not supported as Cursor Cloud Agents credentials. Configure the key with /login -> Use an API key -> Cursor, CURSOR_API_KEY, or --api-key, then retry.";
|
|
14
14
|
// Keep "Network error" aligned with pi's agent-level retry classifier.
|
|
15
15
|
const NETWORK_CURSOR_SDK_ERROR_MESSAGE =
|
|
16
|
-
"Network error: Cursor SDK request failed during network or service I/O. Check your connection
|
|
16
|
+
"Network error: Cursor SDK request failed during network or service I/O. Check your connection.";
|
|
17
17
|
|
|
18
18
|
// Keep this phrase aligned with pi's agent-level retry classifier (`provider.?returned.?error`).
|
|
19
19
|
const RETRYABLE_CURSOR_RUN_FAILURE_PREFIX = "Provider returned error: Cursor SDK run failed";
|
|
@@ -143,7 +143,10 @@ function collectConnectErrorStacks(error: unknown, record: Record<string, unknow
|
|
|
143
143
|
|
|
144
144
|
function isConnectError(error: unknown, record: Record<string, unknown> | undefined): boolean {
|
|
145
145
|
const name = error instanceof Error ? error.name : getErrorStringField(record, "name");
|
|
146
|
-
|
|
146
|
+
if (name === "ConnectError") return true;
|
|
147
|
+
// @cursor/sdk convertConnectError re-wraps backend ConnectErrors (name -> NetworkError,
|
|
148
|
+
// code -> "unavailable") and leaves the original ConnectError on `.cause` without outer details.
|
|
149
|
+
return getErrorStringField(asRecord(record?.cause), "name") === "ConnectError";
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
function isUnauthenticatedConnectCode(code: unknown): boolean {
|
|
@@ -160,13 +163,12 @@ function isCursorSdkStallAbortNetworkError(code: unknown, evidence: string, stac
|
|
|
160
163
|
/(?:operation was aborted|canceled)/i.test(evidence) &&
|
|
161
164
|
/(?:AbortError|operation was aborted)/i.test(`${evidence}\n${stackEvidence}`) &&
|
|
162
165
|
stackEvidence.includes("@cursor/sdk") &&
|
|
163
|
-
stackEvidence.includes("@connectrpc/connect-node") &&
|
|
164
166
|
/\b(?:onStall|reportStall|StallDetected)\b/i.test(stackEvidence)
|
|
165
167
|
);
|
|
166
168
|
}
|
|
167
169
|
|
|
168
170
|
/**
|
|
169
|
-
* @cursor/sdk@1.0.
|
|
171
|
+
* @cursor/sdk@1.0.36 throws internal RetriableError (name/kind "RetriableError") with message
|
|
170
172
|
* "Connection stalled" or "Connection stalled repeatedly" after fetchWithRetry exhausts stalls.
|
|
171
173
|
* The ConnectError is only the cause; the top-level error is not a ConnectError.
|
|
172
174
|
*/
|
|
@@ -181,30 +183,26 @@ export function isCursorSdkConnectionStalledError(error: unknown): boolean {
|
|
|
181
183
|
return /(?:^|[\\/])node_modules[\\/]@cursor[\\/]sdk[\\/]dist[\\/]/.test(stack) || stack.includes("@cursor/sdk");
|
|
182
184
|
}
|
|
183
185
|
|
|
184
|
-
function isCursorExtensionConnectStack(stack: string): boolean {
|
|
185
|
-
// pi runs Cursor SDK in Node, where the SDK dynamically imports connect-node.
|
|
186
|
-
// connect-web is the SDK's Bun/Deno path and is intentionally not classified for supported pi runs.
|
|
187
|
-
return stack.includes("@connectrpc/connect-node") && /(?:^|[\\/])pi-cursor-sdk(?:[\\/]|$)/.test(stack);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
186
|
function getCursorConnectSource(error: unknown, record: Record<string, unknown> | undefined): CursorConnectErrorSource {
|
|
191
|
-
const stack =
|
|
187
|
+
const stack = collectConnectErrorStacks(error, record);
|
|
188
|
+
// Node/Bun use the SDK's vendored transport; Deno uses connect-web.
|
|
192
189
|
if (stack.includes("@cursor/sdk")) return "cursor-sdk-stack";
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
190
|
+
let current = record;
|
|
191
|
+
for (let depth = 0; depth < 3 && current; depth += 1) {
|
|
192
|
+
const details = Array.isArray(current.details) ? current.details : [];
|
|
193
|
+
const hasCursorBackendDetails = details.some((detail) => {
|
|
194
|
+
const type = getErrorStringField(asRecord(detail), "type");
|
|
195
|
+
return typeof type === "string" && type.startsWith("aiserver.");
|
|
196
|
+
});
|
|
197
|
+
if (hasCursorBackendDetails) return "cursor-backend-details";
|
|
198
|
+
current = asRecord(current.cause);
|
|
199
|
+
}
|
|
200
|
+
return "generic-connect";
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
export type CursorConnectErrorSource =
|
|
204
204
|
| "cursor-sdk-stack"
|
|
205
|
-
| "cursor-extension-connect-stack"
|
|
206
205
|
| "cursor-backend-details"
|
|
207
|
-
| "connect-node-stack"
|
|
208
206
|
| "generic-connect";
|
|
209
207
|
|
|
210
208
|
export type CursorConnectErrorClassification =
|
|
@@ -225,20 +223,26 @@ export function classifyCursorConnectError(error: unknown): CursorConnectErrorCl
|
|
|
225
223
|
const evidence = collectConnectErrorEvidence(error, record);
|
|
226
224
|
const stackEvidence = collectConnectErrorStacks(error, record);
|
|
227
225
|
|
|
226
|
+
if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
|
|
227
|
+
return { kind: "network", source: getCursorConnectSource(error, record) };
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const directAbort = (code === 1 || code === "canceled") &&
|
|
231
|
+
(causeName === "AbortError" || /AbortError/.test(stack));
|
|
232
|
+
// The vendored 1.0.36 transport wraps a canceled ConnectError as Unknown.
|
|
233
|
+
// Require the observed canceled -> AbortError cause chain, not generic text.
|
|
234
|
+
const wrappedAbort = (code === 2 || code === "unknown") &&
|
|
235
|
+
causeName === "ConnectError" &&
|
|
236
|
+
(cause?.code === 1 || cause?.code === "canceled") &&
|
|
237
|
+
asRecord(cause?.cause)?.name === "AbortError";
|
|
228
238
|
if (
|
|
229
|
-
(
|
|
239
|
+
(directAbort || wrappedAbort) &&
|
|
230
240
|
Boolean(rawMessage && /(?:operation was aborted|canceled)/i.test(rawMessage)) &&
|
|
231
|
-
(
|
|
232
|
-
stack.includes("@cursor/sdk") &&
|
|
233
|
-
stack.includes("@connectrpc/connect-node")
|
|
241
|
+
stack.includes("@cursor/sdk")
|
|
234
242
|
) {
|
|
235
243
|
return { kind: "abort", source: "cursor-sdk-stack" };
|
|
236
244
|
}
|
|
237
245
|
|
|
238
|
-
if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
|
|
239
|
-
return { kind: "network", source: getCursorConnectSource(error, record) };
|
|
240
|
-
}
|
|
241
|
-
|
|
242
246
|
if (isUnauthenticatedConnectCode(code) || isLikelyAuthError(evidence)) {
|
|
243
247
|
return { kind: "unauthenticated", source: getCursorConnectSource(error, record) };
|
|
244
248
|
}
|
|
@@ -349,27 +353,47 @@ export function resolveCursorSdkAbortCause(options: {
|
|
|
349
353
|
return "unknown";
|
|
350
354
|
}
|
|
351
355
|
|
|
356
|
+
function formatErrorDetail(error: unknown, apiKey: string | undefined, depth = 0): string {
|
|
357
|
+
if (depth >= 3) return "";
|
|
358
|
+
const record = asRecord(error);
|
|
359
|
+
const message = typeof error === "string" ? error : getErrorStringField(record, "message") ?? "";
|
|
360
|
+
const name = getErrorStringField(record, "name");
|
|
361
|
+
const code = getErrorEvidenceField(error, record, "code");
|
|
362
|
+
const scrub = (text: string, limit: number) => scrubSensitiveText(text, apiKey).trim().slice(0, limit);
|
|
363
|
+
const scrubbed = [
|
|
364
|
+
name && name !== "Error" ? `${scrub(name, 120)}:` : "",
|
|
365
|
+
code ? `(code: ${scrub(code, 120)})` : "",
|
|
366
|
+
scrub(message, 1600),
|
|
367
|
+
].filter(Boolean).join(" ");
|
|
368
|
+
const cause = record?.cause === undefined ? "" : formatErrorDetail(record.cause, apiKey, depth + 1);
|
|
369
|
+
return cause ? `${scrubbed}\nCaused by: ${cause}` : scrubbed;
|
|
370
|
+
}
|
|
371
|
+
|
|
352
372
|
export function sanitizeCursorProviderError(
|
|
353
373
|
error: unknown,
|
|
354
374
|
apiKey?: string,
|
|
355
375
|
runtimeTarget?: CursorRuntime,
|
|
356
376
|
): string {
|
|
357
377
|
const record = asRecord(error);
|
|
358
|
-
const message =
|
|
378
|
+
const message = typeof error === "string" ? error : getErrorStringField(record, "message") ?? "";
|
|
359
379
|
if (message === MISSING_CURSOR_API_KEY_MESSAGE) return MISSING_CURSOR_API_KEY_MESSAGE;
|
|
360
|
-
const scrubbed =
|
|
380
|
+
const scrubbed = formatErrorDetail(error, apiKey);
|
|
381
|
+
// A loader failure is not an auth rejection, even inside an authentication wrapper.
|
|
382
|
+
if (/\b(?:ERR_MODULE_NOT_FOUND|MODULE_NOT_FOUND|ResolveMessage)\b|Cannot find (?:module|package)|does not provide an export named/i.test(scrubbed)) return scrubbed;
|
|
361
383
|
const integrationMessage = runtimeTarget === "cloud"
|
|
362
|
-
? formatIntegrationNotConnectedError(error, record,
|
|
384
|
+
? formatIntegrationNotConnectedError(error, record, scrubSensitiveText(message, apiKey).trim(), apiKey)
|
|
363
385
|
: undefined;
|
|
364
386
|
if (integrationMessage) return integrationMessage;
|
|
365
387
|
const connectClassification = classifyCursorConnectError(error);
|
|
366
388
|
if (
|
|
367
389
|
(runtimeTarget === "cloud" && getErrorName(error, record) === "AuthenticationError") ||
|
|
368
|
-
|
|
369
|
-
isLikelyAuthError(scrubbed)
|
|
390
|
+
/\b(?:invalid|revoked|expired|missing) (?:user )?api key\b|\bapi key (?:is )?(?:invalid|revoked|expired|missing)\b/i.test(scrubbed)
|
|
370
391
|
) {
|
|
371
392
|
return runtimeTarget === "cloud" ? CLOUD_AUTH_CURSOR_SDK_ERROR_MESSAGE : AUTH_CURSOR_SDK_ERROR_MESSAGE;
|
|
372
393
|
}
|
|
394
|
+
if (connectClassification?.kind === "unauthenticated" || isLikelyAuthError(scrubbed)) {
|
|
395
|
+
return `Cursor SDK authentication failed. ${scrubbed}`;
|
|
396
|
+
}
|
|
373
397
|
if (connectClassification?.kind === "network" || isCursorSdkConnectionStalledError(error) || isLikelyNetworkTimeout(scrubbed)) return NETWORK_CURSOR_SDK_ERROR_MESSAGE;
|
|
374
398
|
if (isGenericCursorRunFailureMessage(scrubbed)) return RETRYABLE_CURSOR_RUN_FAILURE_PREFIX;
|
|
375
399
|
if (isGenericErrorMessage(scrubbed)) return GENERIC_CURSOR_SDK_ERROR_MESSAGE;
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type Model,
|
|
8
8
|
type SimpleStreamOptions,
|
|
9
9
|
} from "@earendil-works/pi-ai";
|
|
10
|
-
import { streamCursor } from "./cursor-provider.js";
|
|
10
|
+
import { streamCursor, type CursorProviderOwnership } from "./cursor-provider.js";
|
|
11
11
|
import { sanitizeCursorProviderError } from "./cursor-provider-errors.js";
|
|
12
12
|
|
|
13
13
|
function makeProviderRuntimeErrorMessage(model: Model<Api>, error: unknown, apiKey?: string): AssistantMessage {
|
|
@@ -31,22 +31,28 @@ function makeProviderRuntimeErrorMessage(model: Model<Api>, error: unknown, apiK
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export function
|
|
35
|
-
model: Model<Api>,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
): AssistantMessageEventStream {
|
|
39
|
-
const outer = createAssistantMessageEventStream();
|
|
40
|
-
queueMicrotask(async () => {
|
|
41
|
-
try {
|
|
42
|
-
for await (const event of streamCursor(model, context, options)) {
|
|
43
|
-
outer.push(event);
|
|
44
|
-
}
|
|
45
|
-
} catch (error) {
|
|
34
|
+
export function createCursorLazyStream(capture: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => CursorProviderOwnership) {
|
|
35
|
+
return (model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream => {
|
|
36
|
+
const outer = createAssistantMessageEventStream();
|
|
37
|
+
const fail = (error: unknown) => {
|
|
46
38
|
const message = makeProviderRuntimeErrorMessage(model, error, options?.apiKey);
|
|
47
39
|
outer.push({ type: "error", reason: "error", error: message });
|
|
48
40
|
outer.end(message);
|
|
41
|
+
};
|
|
42
|
+
let ownership: CursorProviderOwnership;
|
|
43
|
+
try {
|
|
44
|
+
ownership = capture(model, context, options);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
fail(error);
|
|
47
|
+
return outer;
|
|
49
48
|
}
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
queueMicrotask(async () => {
|
|
50
|
+
try {
|
|
51
|
+
for await (const event of streamCursor(model, context, options, ownership)) outer.push(event);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
fail(error);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return outer;
|
|
57
|
+
};
|
|
52
58
|
}
|
|
@@ -30,13 +30,18 @@ import { partitionNativeToolsByActiveContext } from "./cursor-native-replay-rout
|
|
|
30
30
|
import type { CursorSdkEventDebugRecorder } from "./cursor-sdk-event-debug.js";
|
|
31
31
|
|
|
32
32
|
export const DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS = 5 * 60 * 1000;
|
|
33
|
+
function parseCursorNativeReplayIdleDisposeMs(raw: string | undefined): number {
|
|
34
|
+
if (!raw || /[^0-9]/.test(raw)) return DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
|
|
35
|
+
const value = Number(raw);
|
|
36
|
+
return value >= 1 && value <= 2147483647 ? value : DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
|
|
37
|
+
}
|
|
33
38
|
const CURSOR_NATIVE_REPLAY_TOOL_ID_PATTERN = /^(cursor-replay-\d+-\d+)-tool-\d+$/;
|
|
34
39
|
|
|
35
40
|
interface CursorLiveTurnState {
|
|
36
41
|
emitter: CursorPartialContentEmitter;
|
|
37
42
|
emittedText: string;
|
|
38
43
|
}
|
|
39
|
-
let
|
|
44
|
+
let cursorNativeReplayIdleDisposeMsOverride: number | undefined;
|
|
40
45
|
|
|
41
46
|
type CursorLiveRunDrainMode = "emit" | "chain_user_input";
|
|
42
47
|
type CursorLiveRunDrainOutcome = "tool_use" | "stop" | "error" | "aborted" | "chain_user_input";
|
|
@@ -50,7 +55,7 @@ export async function abandonSessionCursorAgent(scopeKey: string | undefined): P
|
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
export const cursorLiveRuns = createCursorLiveRunCoordinator({
|
|
53
|
-
getIdleDisposeMs: () =>
|
|
58
|
+
getIdleDisposeMs: () => cursorNativeReplayIdleDisposeMsOverride ?? parseCursorNativeReplayIdleDisposeMs(process.env.PI_CURSOR_LIVE_RUN_IDLE_DISPOSE_MS),
|
|
54
59
|
deleteNativeToolDisplay: deleteCursorNativeToolDisplay,
|
|
55
60
|
abandonSessionAgent: (scopeKey) => abandonSessionCursorAgent(scopeKey),
|
|
56
61
|
});
|
|
@@ -64,12 +69,12 @@ function getCursorNativeReplayIdFromToolCallId(toolCallId: string): string | und
|
|
|
64
69
|
return CURSOR_NATIVE_REPLAY_TOOL_ID_PATTERN.exec(toolCallId)?.[1];
|
|
65
70
|
}
|
|
66
71
|
|
|
67
|
-
export function getPendingCursorLiveRun(context: Context): CursorLiveRun | undefined {
|
|
68
|
-
return cursorLiveRuns.getPendingFromContext(context, getCursorNativeReplayIdFromToolCallId);
|
|
72
|
+
export function getPendingCursorLiveRun(context: Context, scopeKey: string): CursorLiveRun | undefined {
|
|
73
|
+
return cursorLiveRuns.getPendingFromContext(context, getCursorNativeReplayIdFromToolCallId, scopeKey);
|
|
69
74
|
}
|
|
70
75
|
|
|
71
|
-
export function getActiveCursorLiveRunForCurrentScope(): CursorLiveRun | undefined {
|
|
72
|
-
return cursorLiveRuns.getActiveForScope();
|
|
76
|
+
export function getActiveCursorLiveRunForCurrentScope(scopeKey?: string): CursorLiveRun | undefined {
|
|
77
|
+
return cursorLiveRuns.getActiveForScope(scopeKey);
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
function splitTextIntoReplayDeltas(text: string): string[] {
|
|
@@ -176,6 +181,7 @@ function emitCursorNativeToolUseTurn(
|
|
|
176
181
|
run: CursorLiveRun,
|
|
177
182
|
toolResultInputTokens: number,
|
|
178
183
|
tools: CursorNativeToolDisplayItem[],
|
|
184
|
+
occupancyFloor: number | undefined,
|
|
179
185
|
debugRecorder?: CursorSdkEventDebugRecorder,
|
|
180
186
|
): void {
|
|
181
187
|
const shouldTerminate = run.done && !run.finalText?.trim() && !cursorLiveRuns.peekEvent(run);
|
|
@@ -193,7 +199,7 @@ function emitCursorNativeToolUseTurn(
|
|
|
193
199
|
stream.push({ type: "toolcall_delta", contentIndex, delta: serializedArgs, partial });
|
|
194
200
|
const block = partial.content[contentIndex];
|
|
195
201
|
if (block.type === "toolCall") stream.push({ type: "toolcall_end", contentIndex, toolCall: block, partial });
|
|
196
|
-
if (recordCursorNativeToolDisplay({ ...tool, terminate: shouldTerminate })) {
|
|
202
|
+
if (recordCursorNativeToolDisplay({ ...tool, terminate: shouldTerminate }, run.nativeDisplay)) {
|
|
197
203
|
run.recordedToolDisplayIds.push(tool.id);
|
|
198
204
|
debugRecorder?.recordDrainEvent("native_tool_display_recorded", {
|
|
199
205
|
toolId: tool.id,
|
|
@@ -205,6 +211,7 @@ function emitCursorNativeToolUseTurn(
|
|
|
205
211
|
applyCursorUsage(partial, model, context, cursorLiveRuns.takeTurnInputTokens(run, toolResultInputTokens), {
|
|
206
212
|
runtime: "local",
|
|
207
213
|
turn: cursorLiveRuns.takeSdkTurnUsage(run),
|
|
214
|
+
occupancyFloor,
|
|
208
215
|
});
|
|
209
216
|
partial.stopReason = "toolUse";
|
|
210
217
|
stream.push({ type: "done", reason: "toolUse", message: partial });
|
|
@@ -236,6 +243,7 @@ function emitCursorBridgeToolUseTurn(
|
|
|
236
243
|
run: CursorLiveRun,
|
|
237
244
|
toolResultInputTokens: number,
|
|
238
245
|
requests: CursorPiBridgeToolRequest[],
|
|
246
|
+
occupancyFloor: number | undefined,
|
|
239
247
|
): void {
|
|
240
248
|
for (const request of requests) {
|
|
241
249
|
const contentIndex = partial.content.length;
|
|
@@ -254,6 +262,7 @@ function emitCursorBridgeToolUseTurn(
|
|
|
254
262
|
applyCursorUsage(partial, model, context, cursorLiveRuns.takeTurnInputTokens(run, toolResultInputTokens), {
|
|
255
263
|
runtime: "local",
|
|
256
264
|
turn: cursorLiveRuns.takeSdkTurnUsage(run),
|
|
265
|
+
occupancyFloor,
|
|
257
266
|
});
|
|
258
267
|
partial.stopReason = "toolUse";
|
|
259
268
|
stream.push({ type: "done", reason: "toolUse", message: partial });
|
|
@@ -268,7 +277,7 @@ async function emitCursorLiveRunPendingToolUseTurn(
|
|
|
268
277
|
context: Context,
|
|
269
278
|
run: CursorLiveRun,
|
|
270
279
|
toolResultInputTokens: number,
|
|
271
|
-
options: { mode: CursorLiveRunDrainMode; signal?: AbortSignal; debugRecorder?: CursorSdkEventDebugRecorder },
|
|
280
|
+
options: { mode: CursorLiveRunDrainMode; signal?: AbortSignal; debugRecorder?: CursorSdkEventDebugRecorder; occupancyFloor?: number },
|
|
272
281
|
): Promise<"tool_use" | "handled" | undefined> {
|
|
273
282
|
const debugRecorder = options.debugRecorder ?? run.debugRecorder;
|
|
274
283
|
const eventType = cursorLiveRuns.peekEvent(run)?.type;
|
|
@@ -285,13 +294,13 @@ async function emitCursorLiveRunPendingToolUseTurn(
|
|
|
285
294
|
}
|
|
286
295
|
if (!sdkTurnEnded) cursorLiveRuns.ignoreFutureSdkTurnUsage(run);
|
|
287
296
|
if (options.mode === "emit") turn.emitter.closeAll();
|
|
288
|
-
emitCursorNativeToolUseTurn(stream, partial, model, context, run, toolResultInputTokens, active, debugRecorder);
|
|
297
|
+
emitCursorNativeToolUseTurn(stream, partial, model, context, run, toolResultInputTokens, active, options.occupancyFloor, debugRecorder);
|
|
289
298
|
} else {
|
|
290
299
|
const requests = cursorLiveRuns.collectBridgeToolBatch(run);
|
|
291
300
|
if (requests.length === 0) return "handled";
|
|
292
301
|
if (!sdkTurnEnded) cursorLiveRuns.ignoreFutureSdkTurnUsage(run);
|
|
293
302
|
if (options.mode === "emit") turn.emitter.closeAll();
|
|
294
|
-
emitCursorBridgeToolUseTurn(stream, partial, model, context, run, toolResultInputTokens, requests);
|
|
303
|
+
emitCursorBridgeToolUseTurn(stream, partial, model, context, run, toolResultInputTokens, requests, options.occupancyFloor);
|
|
295
304
|
}
|
|
296
305
|
return "tool_use";
|
|
297
306
|
}
|
|
@@ -303,7 +312,7 @@ export async function drainCursorLiveRunTurn(
|
|
|
303
312
|
context: Context,
|
|
304
313
|
run: CursorLiveRun,
|
|
305
314
|
toolResultInputTokens: number,
|
|
306
|
-
options: { mode: CursorLiveRunDrainMode; signal?: AbortSignal; debugRecorder?: CursorSdkEventDebugRecorder; emitter?: CursorPartialContentEmitter },
|
|
315
|
+
options: { mode: CursorLiveRunDrainMode; signal?: AbortSignal; debugRecorder?: CursorSdkEventDebugRecorder; emitter?: CursorPartialContentEmitter; occupancyFloor?: number },
|
|
307
316
|
): Promise<CursorLiveRunDrainOutcome> {
|
|
308
317
|
const debugRecorder = options.debugRecorder ?? run.debugRecorder;
|
|
309
318
|
debugRecorder?.recordDrainEvent("turn_start", {
|
|
@@ -390,7 +399,7 @@ export async function drainCursorLiveRunTurn(
|
|
|
390
399
|
applyCursorUsage(partial, model, context, cursorLiveRuns.takeTurnInputTokens(run, toolResultInputTokens), {
|
|
391
400
|
runtime: "local",
|
|
392
401
|
turn: cursorLiveRuns.takeSdkTurnUsage(run),
|
|
393
|
-
|
|
402
|
+
occupancyFloor: options.occupancyFloor,
|
|
394
403
|
});
|
|
395
404
|
if (run.resumeNotice) {
|
|
396
405
|
emitDisplayOnlyTraceBlock(stream, partial, run.resumeNotice);
|
|
@@ -436,12 +445,14 @@ export async function drainExistingCursorLiveRunBeforeSend(
|
|
|
436
445
|
partial: AssistantMessage,
|
|
437
446
|
model: Model<Api>,
|
|
438
447
|
context: Context,
|
|
439
|
-
signal
|
|
440
|
-
turnDebugRecorder
|
|
448
|
+
signal: AbortSignal | undefined,
|
|
449
|
+
turnDebugRecorder: CursorSdkEventDebugRecorder | undefined,
|
|
450
|
+
scopeKey: string,
|
|
451
|
+
occupancyFloor?: number,
|
|
441
452
|
): Promise<LiveRunPreSendOutcome> {
|
|
442
453
|
turnDebugRecorder?.recordDrainEvent("pre_send_start", {});
|
|
443
454
|
while (true) {
|
|
444
|
-
const run = getPendingCursorLiveRun(context) ?? getActiveCursorLiveRunForCurrentScope();
|
|
455
|
+
const run = getPendingCursorLiveRun(context, scopeKey) ?? getActiveCursorLiveRunForCurrentScope(scopeKey);
|
|
445
456
|
if (!run || run.disposed) {
|
|
446
457
|
turnDebugRecorder?.recordDrainEvent("pre_send_end", { outcome: "continue_send", reason: "no_pending_run" });
|
|
447
458
|
return "continue_send";
|
|
@@ -462,6 +473,7 @@ export async function drainExistingCursorLiveRunBeforeSend(
|
|
|
462
473
|
mode: shouldChainUserInput ? "chain_user_input" : "emit",
|
|
463
474
|
signal,
|
|
464
475
|
debugRecorder: turnDebugRecorder,
|
|
476
|
+
occupancyFloor,
|
|
465
477
|
});
|
|
466
478
|
const mapped = drainOutcome === "chain_user_input" ? "continue_send" : "stream_ended";
|
|
467
479
|
turnDebugRecorder?.recordDrainEvent("pre_send_iteration", {
|
|
@@ -490,11 +502,11 @@ export async function drainExistingCursorLiveRunBeforeSend(
|
|
|
490
502
|
}
|
|
491
503
|
|
|
492
504
|
export function setCursorNativeReplayIdleDisposeMs(value: number): void {
|
|
493
|
-
|
|
505
|
+
cursorNativeReplayIdleDisposeMsOverride = value;
|
|
494
506
|
}
|
|
495
507
|
|
|
496
508
|
export function resetCursorNativeReplayIdleDisposeMs(): void {
|
|
497
|
-
|
|
509
|
+
cursorNativeReplayIdleDisposeMsOverride = undefined;
|
|
498
510
|
}
|
|
499
511
|
|
|
500
512
|
export async function releaseAllPendingCursorLiveRunsForTests(): Promise<void> {
|