pi-cursor-sdk 0.5.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 +50 -0
- package/README.md +110 -30
- package/dist/context.js +53 -34
- package/dist/cursor-api-key.js +34 -19
- 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-fallback-models.generated.js +1 -1
- package/dist/cursor-fallback-warning.js +8 -2
- package/dist/cursor-live-run-coordinator.js +22 -2
- package/dist/cursor-mcp-timeout-override.js +3 -1
- package/dist/cursor-pi-tool-bridge-run.js +21 -0
- package/dist/cursor-pi-tool-bridge-server.js +1 -1
- package/dist/cursor-provider-binding.js +70 -10
- package/dist/cursor-provider-errors.js +33 -26
- package/dist/cursor-provider-live-run-drain.js +10 -4
- package/dist/cursor-provider-run-finalizer.js +2 -1
- package/dist/cursor-provider-turn-prepare.js +25 -9
- package/dist/cursor-provider-turn-summary.js +1 -1
- package/dist/cursor-provider-turn-tool-ledger.js +13 -7
- package/dist/cursor-provider.js +2 -1
- package/dist/cursor-question-tool.js +5 -5
- package/dist/cursor-request-provenance.js +13 -2
- package/dist/cursor-sdk-output-filter.js +1 -1
- package/dist/cursor-sdk-process-error-guard.js +1 -3
- package/dist/cursor-sdk-runtime.js +13 -14
- package/dist/cursor-sdk-vendor-env.js +20 -0
- package/dist/cursor-session-agent-cleanup.js +29 -26
- package/dist/cursor-session-agent.js +38 -16
- package/dist/cursor-session-send-policy.js +2 -2
- package/dist/cursor-session-store.js +235 -45
- package/dist/cursor-state.js +6 -3
- package/dist/cursor-tool-manifest.js +1 -1
- package/dist/index.js +21 -19
- package/dist/model-discovery.js +51 -18
- package/dist/model-list-cache.js +12 -1
- package/docs/cursor-live-smoke-checklist.md +2 -2
- package/docs/cursor-model-ux-spec.md +70 -26
- package/docs/cursor-native-tool-replay.md +13 -5
- package/docs/cursor-native-tool-visual-audit.md +1 -1
- package/docs/cursor-testing-lessons.md +43 -5
- package/docs/cursor-tool-surfaces.md +3 -3
- 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/lib/cursor-sdk-output-filter.d.mts +1 -0
- package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
- package/scripts/platform-smoke/artifacts.mjs +7 -1
- package/shared/cursor-sdk-output-filter.d.mts +3 -0
- package/shared/cursor-sdk-output-filter.mjs +117 -44
- package/src/context.ts +57 -33
- package/src/cursor-api-key.ts +37 -17
- 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-fallback-models.generated.ts +1 -1
- package/src/cursor-fallback-warning.ts +7 -3
- package/src/cursor-live-run-coordinator.ts +21 -2
- package/src/cursor-mcp-timeout-override.ts +3 -1
- package/src/cursor-pi-tool-bridge-run.ts +21 -0
- package/src/cursor-pi-tool-bridge-server.ts +1 -2
- package/src/cursor-pi-tool-bridge-types.ts +3 -0
- package/src/cursor-provider-binding.ts +70 -11
- package/src/cursor-provider-errors.ts +32 -28
- package/src/cursor-provider-live-run-drain.ts +9 -4
- package/src/cursor-provider-run-finalizer.ts +2 -1
- package/src/cursor-provider-turn-prepare.ts +28 -13
- package/src/cursor-provider-turn-summary.ts +1 -1
- package/src/cursor-provider-turn-tool-ledger.ts +12 -7
- package/src/cursor-provider.ts +3 -1
- package/src/cursor-question-tool.ts +5 -5
- package/src/cursor-request-provenance.ts +18 -3
- package/src/cursor-sdk-output-filter.ts +2 -0
- package/src/cursor-sdk-process-error-guard.ts +1 -2
- package/src/cursor-sdk-runtime.ts +14 -15
- package/src/cursor-sdk-vendor-env.ts +22 -0
- package/src/cursor-session-agent-cleanup.ts +28 -27
- package/src/cursor-session-agent.ts +44 -17
- package/src/cursor-session-send-policy.ts +2 -2
- package/src/cursor-session-store.ts +259 -53
- package/src/cursor-state.ts +7 -2
- package/src/cursor-tool-manifest.ts +1 -1
- package/src/index.ts +19 -19
- package/src/model-discovery.ts +62 -23
- 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
package/dist/context.js
CHANGED
|
@@ -25,12 +25,13 @@ export function getCursorToolTailGuardText(options = {}) {
|
|
|
25
25
|
: getCursorPlanModeToolGuidanceText(options.agentMode, { includePiBridgeGuidance: options.includePiBridgeGuidance }),
|
|
26
26
|
"Exact-output requests: output exactly the requested text; no preamble or checks unless asked.",
|
|
27
27
|
"Tools: call available Cursor SDK/MCP tools; never print tool cards as assistant text.",
|
|
28
|
+
"Do not comment on GitHub issues or PRs unless the user asked.",
|
|
28
29
|
options.includePiBridgeGuidance === false ? undefined : CURSOR_PI_BRIDGE_PREFERENCE_TEXT,
|
|
29
30
|
].filter((line) => line !== undefined).join("\n");
|
|
30
31
|
}
|
|
31
32
|
function getCursorToolBoundaryText(options = {}) {
|
|
32
33
|
const includePiBridgeGuidance = options.includePiBridgeGuidance !== false;
|
|
33
|
-
const includePiAskQuestionGuidance = includePiBridgeGuidance && options.includePiAskQuestionGuidance
|
|
34
|
+
const includePiAskQuestionGuidance = includePiBridgeGuidance && options.includePiAskQuestionGuidance === true;
|
|
34
35
|
const lines = [
|
|
35
36
|
"Cursor SDK tool boundary:",
|
|
36
37
|
"Call only Cursor SDK/MCP tools exposed in this run; pi history names, replay labels, and transcript names are not callable.",
|
|
@@ -38,7 +39,7 @@ function getCursorToolBoundaryText(options = {}) {
|
|
|
38
39
|
? "For exposed pi bridge tools, call pi__* MCP names, not pi card/history names."
|
|
39
40
|
: undefined,
|
|
40
41
|
"Do not claim pi-side or WebSearch/WebFetch tools unless Cursor ran an equivalent tool.",
|
|
41
|
-
includePiAskQuestionGuidance ? "Use pi__cursor_ask_question
|
|
42
|
+
includePiAskQuestionGuidance ? "Use pi__cursor_ask_question only if the user asked to be prompted." : undefined,
|
|
42
43
|
getCursorPlanModeToolGuidanceText(options.agentMode, { includePiBridgeGuidance }),
|
|
43
44
|
"Images: only latest user images are sent; ask to reattach prior images.",
|
|
44
45
|
].filter((line) => line !== undefined);
|
|
@@ -47,9 +48,11 @@ function getCursorToolBoundaryText(options = {}) {
|
|
|
47
48
|
}
|
|
48
49
|
return lines.join("\n");
|
|
49
50
|
}
|
|
50
|
-
function getCursorBootstrapTailSections(options =
|
|
51
|
+
function getCursorBootstrapTailSections(options, hasNewNativeUser = true) {
|
|
51
52
|
return [
|
|
52
|
-
|
|
53
|
+
hasNewNativeUser
|
|
54
|
+
? "Answer the latest user request above using the instructions and Cursor SDK capabilities available in this run."
|
|
55
|
+
: "Continue from the pending background context above using Cursor SDK capabilities. No new user request was submitted; earlier user requests are history, not new instructions.",
|
|
53
56
|
getCursorToolTailGuardText({ ...options, includePlanModeGuidance: false }),
|
|
54
57
|
];
|
|
55
58
|
}
|
|
@@ -65,23 +68,11 @@ function isImageBlock(block) {
|
|
|
65
68
|
function isToolCallBlock(block) {
|
|
66
69
|
return block.type === "toolCall";
|
|
67
70
|
}
|
|
68
|
-
function extractLatestImages(messages) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
continue;
|
|
74
|
-
if (typeof msg.content === "string")
|
|
75
|
-
return [];
|
|
76
|
-
const images = [];
|
|
77
|
-
for (const block of msg.content) {
|
|
78
|
-
if (isImageBlock(block) && block.data && block.mimeType) {
|
|
79
|
-
images.push({ data: block.data, mimeType: block.mimeType });
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return images;
|
|
83
|
-
}
|
|
84
|
-
return [];
|
|
71
|
+
function extractLatestImages(messages, latestUserIndex = getLatestUserMessageIndex(messages)) {
|
|
72
|
+
const message = messages[latestUserIndex];
|
|
73
|
+
if (!message || message.role !== "user" || typeof message.content === "string")
|
|
74
|
+
return [];
|
|
75
|
+
return message.content.flatMap((block) => isImageBlock(block) && block.data && block.mimeType ? [{ data: block.data, mimeType: block.mimeType }] : []);
|
|
85
76
|
}
|
|
86
77
|
function formatContentBlocks(content) {
|
|
87
78
|
if (typeof content === "string")
|
|
@@ -147,17 +138,29 @@ function getLatestUserMessageIndex(messages) {
|
|
|
147
138
|
}
|
|
148
139
|
return -1;
|
|
149
140
|
}
|
|
141
|
+
export function getCursorPendingInput(messages, nativeSourceRoles) {
|
|
142
|
+
const start = messages.findLastIndex((message) => message.role === "assistant") + 1;
|
|
143
|
+
const latestUserIndex = nativeSourceRoles.findLastIndex((role, index) => index >= start && role === "user");
|
|
144
|
+
return { start, latestUserIndex };
|
|
145
|
+
}
|
|
146
|
+
function formatPromptMessage(message, index, nativeSourceRoles) {
|
|
147
|
+
if (message.role === "user" && nativeSourceRoles && nativeSourceRoles[index] !== "user") {
|
|
148
|
+
const text = formatContentBlocks(message.content);
|
|
149
|
+
return text ? `Background context: ${text}` : undefined;
|
|
150
|
+
}
|
|
151
|
+
return formatMessage(message);
|
|
152
|
+
}
|
|
150
153
|
function getSectionCost(section) {
|
|
151
154
|
return section.length + SECTION_SEPARATOR.length;
|
|
152
155
|
}
|
|
153
|
-
function applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages,
|
|
156
|
+
function applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages, requiredMessageIndexes, options) {
|
|
154
157
|
const maxInputTokens = options.maxInputTokens;
|
|
155
158
|
if (maxInputTokens === undefined || !Number.isFinite(maxInputTokens) || maxInputTokens <= 0) {
|
|
156
159
|
return [...sectionsBeforeMessages, ...messageSections.map((section) => section.text), ...sectionsAfterMessages];
|
|
157
160
|
}
|
|
158
161
|
const charsPerToken = options.charsPerToken ?? CURSOR_APPROX_CHARS_PER_TOKEN;
|
|
159
162
|
const maxChars = Math.max(1, Math.floor(maxInputTokens * charsPerToken));
|
|
160
|
-
const requiredMessageSections = messageSections.filter((section) => section.index
|
|
163
|
+
const requiredMessageSections = messageSections.filter((section) => requiredMessageIndexes.includes(section.index));
|
|
161
164
|
const requiredCost = [...sectionsBeforeMessages, ...requiredMessageSections.map((section) => section.text), ...sectionsAfterMessages].reduce((total, section) => total + getSectionCost(section), 0);
|
|
162
165
|
let remainingChars = maxChars - requiredCost;
|
|
163
166
|
const includedMessageIndexes = new Set(requiredMessageSections.map((section) => section.index));
|
|
@@ -272,7 +275,7 @@ export function computeCursorContextFingerprint(context) {
|
|
|
272
275
|
};
|
|
273
276
|
return JSON.stringify(payload);
|
|
274
277
|
}
|
|
275
|
-
export function shouldBootstrapCursorContext(sendState, context) {
|
|
278
|
+
export function shouldBootstrapCursorContext(sendState, context, nativeSourceRoles) {
|
|
276
279
|
if (!sendState.bootstrapped)
|
|
277
280
|
return true;
|
|
278
281
|
const previous = parseCursorContextFingerprint(sendState.contextFingerprint);
|
|
@@ -296,9 +299,17 @@ export function shouldBootstrapCursorContext(sendState, context) {
|
|
|
296
299
|
if (current.messageHashes[index] !== previous.messageHashes[index])
|
|
297
300
|
return true;
|
|
298
301
|
}
|
|
299
|
-
// An incremental prompt carries only the latest new user message. Rebootstrap
|
|
300
|
-
// if additional model-visible input (such as ! shell output) would be lost.
|
|
301
302
|
const appended = normalizePiContextMessages(context.messages.slice(previous.messageHashes.length));
|
|
303
|
+
if (nativeSourceRoles) {
|
|
304
|
+
const messages = normalizePiContextMessages(context.messages);
|
|
305
|
+
const offset = messages.length - appended.length;
|
|
306
|
+
// Native summaries invalidate the pool; other pending input travels together.
|
|
307
|
+
if (nativeSourceRoles.slice(offset).some((role) => role === "branchSummary" || role === "compactionSummary"))
|
|
308
|
+
return true;
|
|
309
|
+
const { start } = getCursorPendingInput(messages, nativeSourceRoles);
|
|
310
|
+
return appended.some((message, index) => message.role === "user" && offset + index < start);
|
|
311
|
+
}
|
|
312
|
+
// Without native origin, an incremental prompt carries only the final user.
|
|
302
313
|
const appendedUsers = appended.filter((message) => message.role === "user");
|
|
303
314
|
return appended.length > 0 && (appendedUsers.length !== 1 || appended.at(-1)?.role !== "user");
|
|
304
315
|
}
|
|
@@ -309,19 +320,25 @@ export function shouldBootstrapCursorSend(sendState, context) {
|
|
|
309
320
|
export function buildCursorIncrementalPrompt(context, options = {}) {
|
|
310
321
|
// Incremental sends omit Pi system instructions and the full tool boundary; the session agent retains both from bootstrap.
|
|
311
322
|
const messages = normalizePiContextMessages(context.messages);
|
|
312
|
-
const
|
|
323
|
+
const pending = options.nativeSourceRoles && getCursorPendingInput(messages, options.nativeSourceRoles);
|
|
324
|
+
const latestUserMessageIndex = pending ? pending.latestUserIndex : getLatestUserMessageIndex(messages);
|
|
313
325
|
const latestUserMessage = latestUserMessageIndex >= 0 ? messages[latestUserMessageIndex] : undefined;
|
|
314
326
|
const latestUserText = latestUserMessage ? formatMessage(latestUserMessage) : undefined;
|
|
315
327
|
const sectionsBeforeMessages = [
|
|
316
328
|
"Continue the conversation using Cursor SDK capabilities only. Do not list, promise, or call pi-only tools from earlier context as if they were available.",
|
|
317
329
|
];
|
|
318
|
-
const latestUserMessageSections =
|
|
319
|
-
|
|
330
|
+
const latestUserMessageSections = pending
|
|
331
|
+
? messages.flatMap((message, index) => {
|
|
332
|
+
const text = index >= pending.start ? formatPromptMessage(message, index, options.nativeSourceRoles) : undefined;
|
|
333
|
+
return text ? [{ index, text }] : [];
|
|
334
|
+
})
|
|
335
|
+
: latestUserText && latestUserMessageIndex >= 0 ? [{ index: latestUserMessageIndex, text: latestUserText }] : [];
|
|
336
|
+
const images = extractLatestImages(messages, latestUserMessageIndex);
|
|
320
337
|
const imageTokenReserve = images.length * (options.imageTokenEstimate ?? 0);
|
|
321
338
|
const budgetOptions = options.maxInputTokens === undefined
|
|
322
339
|
? options
|
|
323
340
|
: { ...options, maxInputTokens: Math.max(1, options.maxInputTokens - imageTokenReserve) };
|
|
324
|
-
const parts = applyPromptBudget(sectionsBeforeMessages, latestUserMessageSections, [getCursorToolTailGuardText(options)],
|
|
341
|
+
const parts = applyPromptBudget(sectionsBeforeMessages, latestUserMessageSections, [getCursorToolTailGuardText(options)], latestUserMessageSections.map((section) => section.index), budgetOptions);
|
|
325
342
|
return { text: parts.join(SECTION_SEPARATOR), images };
|
|
326
343
|
}
|
|
327
344
|
/** Native compaction/tree instructions are already a complete summarization request. */
|
|
@@ -349,17 +366,19 @@ export function buildCursorPrompt(context, options = {}) {
|
|
|
349
366
|
const messages = normalizePiContextMessages(context.messages);
|
|
350
367
|
const messageSections = messages
|
|
351
368
|
.map((msg, index) => {
|
|
352
|
-
const text =
|
|
369
|
+
const text = formatPromptMessage(msg, index, options.nativeSourceRoles);
|
|
353
370
|
return text ? { index, text } : undefined;
|
|
354
371
|
})
|
|
355
372
|
.filter((section) => section !== undefined);
|
|
356
|
-
const
|
|
357
|
-
const
|
|
373
|
+
const pending = options.nativeSourceRoles && getCursorPendingInput(messages, options.nativeSourceRoles);
|
|
374
|
+
const sectionsAfterMessages = getCursorBootstrapTailSections(options, !pending || pending.latestUserIndex >= 0);
|
|
375
|
+
const images = extractLatestImages(messages, pending ? pending.latestUserIndex : getLatestUserMessageIndex(messages));
|
|
358
376
|
const imageTokenReserve = images.length * (options.imageTokenEstimate ?? 0);
|
|
359
377
|
const budgetOptions = options.maxInputTokens === undefined
|
|
360
378
|
? options
|
|
361
379
|
: { ...options, maxInputTokens: Math.max(1, options.maxInputTokens - imageTokenReserve) };
|
|
362
|
-
const parts = applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages,
|
|
380
|
+
const parts = applyPromptBudget(sectionsBeforeMessages, messageSections, sectionsAfterMessages, pending ? messageSections.filter((section) => section.index >= pending.start).map((section) => section.index)
|
|
381
|
+
: [getLatestUserMessageIndex(messages)], budgetOptions);
|
|
363
382
|
const text = parts.join(SECTION_SEPARATOR);
|
|
364
383
|
return { text, images };
|
|
365
384
|
}
|
package/dist/cursor-api-key.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { envApiKeyAuth } from "@earendil-works/pi-ai";
|
|
2
|
+
import { parseEnvBoolean } from "./cursor-env-boolean.js";
|
|
2
3
|
export const CURSOR_API_KEY_ENV_VAR = "CURSOR_API_KEY";
|
|
3
|
-
|
|
4
|
-
// Non-secret literal sentinel for pi's provider registry. Pi 0.77 treats `$ENV_VAR`
|
|
5
|
-
// values as unconfigured when the env var is absent, which hides fallback models
|
|
6
|
-
// before `/login`. Keep the provider available and resolve the real key in the
|
|
7
|
-
// Cursor provider turn path from pi auth or CURSOR_API_KEY.
|
|
4
|
+
// Legacy no-auth availability policy only; never a configured models.json key.
|
|
8
5
|
export const CURSOR_API_KEY_CONFIG_VALUE = "pi-cursor-sdk-cursor-api-key-placeholder";
|
|
9
6
|
const CURSOR_API_KEY_PLACEHOLDERS = new Set([
|
|
10
7
|
CURSOR_API_KEY_ENV_VAR,
|
|
@@ -13,22 +10,40 @@ const CURSOR_API_KEY_PLACEHOLDERS = new Set([
|
|
|
13
10
|
CURSOR_API_KEY_CONFIG_VALUE,
|
|
14
11
|
]);
|
|
15
12
|
export function resolveCursorApiKey(apiKey) {
|
|
13
|
+
return normalizeCursorApiKey(apiKey) ?? (apiKey && CURSOR_API_KEY_PLACEHOLDERS.has(apiKey.trim())
|
|
14
|
+
? normalizeCursorApiKey(process.env.CURSOR_API_KEY) : undefined);
|
|
15
|
+
}
|
|
16
|
+
export function normalizeCursorApiKey(apiKey) {
|
|
16
17
|
const trimmed = apiKey?.trim();
|
|
17
|
-
if (!trimmed)
|
|
18
|
+
if (!trimmed || CURSOR_API_KEY_PLACEHOLDERS.has(trimmed))
|
|
18
19
|
return undefined;
|
|
19
|
-
if (CURSOR_API_KEY_PLACEHOLDERS.has(trimmed))
|
|
20
|
-
return process.env.CURSOR_API_KEY?.trim() || undefined;
|
|
21
20
|
return trimmed;
|
|
22
21
|
}
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
22
|
+
export async function resolveCursorCredentialApiKey(credential, environment) {
|
|
23
|
+
return normalizeCursorApiKey(credential?.key)
|
|
24
|
+
?? normalizeCursorApiKey(credential?.env?.CURSOR_API_KEY)
|
|
25
|
+
?? normalizeCursorApiKey(await environment());
|
|
31
26
|
}
|
|
32
|
-
export function
|
|
33
|
-
|
|
27
|
+
export function cursorApiKeyAuth() {
|
|
28
|
+
const standard = envApiKeyAuth("Cursor API key", [CURSOR_API_KEY_ENV_VAR]);
|
|
29
|
+
const auth = {
|
|
30
|
+
name: standard.name,
|
|
31
|
+
login: standard.login,
|
|
32
|
+
async check(input) {
|
|
33
|
+
const resolved = await auth.resolve(input);
|
|
34
|
+
return resolved ? { type: "api_key", source: resolved.source } : undefined;
|
|
35
|
+
},
|
|
36
|
+
async resolve({ ctx, credential, signal }) {
|
|
37
|
+
signal.throwIfAborted();
|
|
38
|
+
const key = await resolveCursorCredentialApiKey(credential, () => ctx.env(CURSOR_API_KEY_ENV_VAR));
|
|
39
|
+
signal.throwIfAborted();
|
|
40
|
+
if (key)
|
|
41
|
+
return { auth: { apiKey: key }, env: credential?.env, source: credential ? "stored credential" : CURSOR_API_KEY_ENV_VAR };
|
|
42
|
+
if (!parseEnvBoolean(process.env.PI_CURSOR_HIDE_MODELS_WHEN_LOGGED_OUT, false)) {
|
|
43
|
+
return { auth: { apiKey: CURSOR_API_KEY_CONFIG_VALUE }, source: "fallback" };
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
return auth;
|
|
34
49
|
}
|
|
@@ -59,6 +59,7 @@ export function buildCursorCloudAgentOptions(options) {
|
|
|
59
59
|
model: options.modelSelection,
|
|
60
60
|
mode: options.agentMode,
|
|
61
61
|
...(options.name ? { name: options.name } : {}),
|
|
62
|
+
...(options.agents && Object.keys(options.agents).length ? { agents: options.agents } : {}),
|
|
62
63
|
cloud,
|
|
63
64
|
};
|
|
64
65
|
}
|
package/dist/cursor-config.js
CHANGED
|
@@ -23,6 +23,7 @@ export const CURSOR_SANDBOX_ENV = "PI_CURSOR_SANDBOX";
|
|
|
23
23
|
export const CURSOR_LOCAL_FORCE_ENV = "PI_CURSOR_LOCAL_FORCE";
|
|
24
24
|
export const CURSOR_LOCAL_RESUME_ENV = "PI_CURSOR_LOCAL_RESUME";
|
|
25
25
|
export const CURSOR_HTTP1_ENV = "PI_CURSOR_HTTP_1_1";
|
|
26
|
+
export const CURSOR_STATE_ROOT_ENV = "PI_CURSOR_SDK_STATE_ROOT";
|
|
26
27
|
const TRUST_LEVELS = {
|
|
27
28
|
cli: "one-shot",
|
|
28
29
|
environment: "environment",
|
|
@@ -107,6 +108,44 @@ function parseCloudEnvironment(value) {
|
|
|
107
108
|
parsed.name = name;
|
|
108
109
|
return Object.keys(parsed).length > 0 ? parsed : undefined;
|
|
109
110
|
}
|
|
111
|
+
const THINKING_LEVELS = {
|
|
112
|
+
off: true,
|
|
113
|
+
minimal: true,
|
|
114
|
+
low: true,
|
|
115
|
+
medium: true,
|
|
116
|
+
high: true,
|
|
117
|
+
xhigh: true,
|
|
118
|
+
max: true,
|
|
119
|
+
};
|
|
120
|
+
function isCursorSubagentThinkingLevel(value) {
|
|
121
|
+
return typeof value === "string" && Object.hasOwn(THINKING_LEVELS, value);
|
|
122
|
+
}
|
|
123
|
+
function parseCustomSubagents(value) {
|
|
124
|
+
const record = asRecord(value);
|
|
125
|
+
if (!record)
|
|
126
|
+
return undefined;
|
|
127
|
+
const entries = [];
|
|
128
|
+
for (const [name, raw] of Object.entries(record)) {
|
|
129
|
+
// Extension config policy, not an upstream SDK naming restriction.
|
|
130
|
+
if (!/^[A-Za-z][A-Za-z0-9._-]{0,63}$/.test(name))
|
|
131
|
+
continue;
|
|
132
|
+
const entry = asRecord(raw);
|
|
133
|
+
const description = parseNonEmptyString(entry?.description);
|
|
134
|
+
const prompt = parseNonEmptyString(entry?.prompt);
|
|
135
|
+
if (!entry || !description || !prompt)
|
|
136
|
+
continue;
|
|
137
|
+
const model = parseNonEmptyString(entry.model);
|
|
138
|
+
const thinking = entry.thinking;
|
|
139
|
+
entries.push([name, {
|
|
140
|
+
description,
|
|
141
|
+
prompt,
|
|
142
|
+
...(model ? { model } : {}),
|
|
143
|
+
...(isCursorSubagentThinkingLevel(thinking) ? { thinking } : {}),
|
|
144
|
+
...(typeof entry.fast === "boolean" ? { fast: entry.fast } : {}),
|
|
145
|
+
}]);
|
|
146
|
+
}
|
|
147
|
+
return entries.length ? Object.fromEntries(entries) : undefined;
|
|
148
|
+
}
|
|
110
149
|
export function parseCursorSdkConfig(value) {
|
|
111
150
|
const record = asRecord(value);
|
|
112
151
|
if (!record)
|
|
@@ -114,6 +153,9 @@ export function parseCursorSdkConfig(value) {
|
|
|
114
153
|
const config = {};
|
|
115
154
|
if (isCursorRuntime(record.runtime))
|
|
116
155
|
config.runtime = record.runtime;
|
|
156
|
+
const subagents = parseCustomSubagents(record.subagents);
|
|
157
|
+
if (subagents)
|
|
158
|
+
config.subagents = subagents;
|
|
117
159
|
const fastDefaults = asRecord(record.fastDefaults);
|
|
118
160
|
if (fastDefaults) {
|
|
119
161
|
config.fastDefaults = Object.fromEntries(Object.entries(fastDefaults).filter((entry) => typeof entry[1] === "boolean"));
|
|
@@ -153,6 +195,8 @@ export function parseCursorSdkConfig(value) {
|
|
|
153
195
|
const local = asRecord(record.local);
|
|
154
196
|
if (local) {
|
|
155
197
|
const parsedLocal = {};
|
|
198
|
+
if (typeof local.storeRoot === "string" && local.storeRoot.trim())
|
|
199
|
+
parsedLocal.storeRoot = local.storeRoot;
|
|
156
200
|
if (typeof local.autoReview === "boolean")
|
|
157
201
|
parsedLocal.autoReview = local.autoReview;
|
|
158
202
|
if (typeof local.sandbox === "boolean")
|
|
@@ -389,6 +433,8 @@ const CLOUD_ORDER = ["cli", "environment", "session", "user", "builtin"];
|
|
|
389
433
|
const LOCAL_ORDER = ["cli", "environment", "project", "user", "builtin"];
|
|
390
434
|
const LOCAL_FORCE_ORDER = ["cli", "environment", "builtin"];
|
|
391
435
|
const HTTP1_ORDER = ["session", "environment", "user", "builtin"];
|
|
436
|
+
const SUBAGENTS_ORDER = ["project", "user", "builtin"];
|
|
437
|
+
const STORE_ROOT_ORDER = ["environment", "user", "builtin"];
|
|
392
438
|
function buildFieldLayers(order, values) {
|
|
393
439
|
return order.map((source) => (source === "builtin" ? resolved("builtin", values.builtin) : valueFrom(source, values[source])));
|
|
394
440
|
}
|
|
@@ -401,6 +447,13 @@ function resolveSafetyField(order, values, risk) {
|
|
|
401
447
|
function resolveEnvNamesSafetyField(order, values) {
|
|
402
448
|
return resolveWithCap(buildFieldLayers(order, values), valueFrom("user", values.user), envNamesCap);
|
|
403
449
|
}
|
|
450
|
+
export function resolveCursorLocalStoreRoot({ env = process.env, user } = {}) {
|
|
451
|
+
return resolveOrdinaryField(STORE_ROOT_ORDER, {
|
|
452
|
+
environment: env[CURSOR_STATE_ROOT_ENV]?.trim() ? env[CURSOR_STATE_ROOT_ENV] : undefined,
|
|
453
|
+
user: user?.local?.storeRoot?.trim() ? user.local.storeRoot : undefined,
|
|
454
|
+
builtin: undefined,
|
|
455
|
+
});
|
|
456
|
+
}
|
|
404
457
|
export function cursorSdkConfigFromEnv(env = process.env) {
|
|
405
458
|
const config = {};
|
|
406
459
|
const runtime = validateExplicitValue(env[CURSOR_RUNTIME_ENV], CURSOR_RUNTIME_ENV, isCursorRuntime, '"local" or "cloud"');
|
|
@@ -483,6 +536,11 @@ export function resolveCursorSdkConfig(options = {}) {
|
|
|
483
536
|
user: user?.runtime,
|
|
484
537
|
builtin: builtIn.runtime,
|
|
485
538
|
}, (value) => (value === "cloud" ? 1 : 0)),
|
|
539
|
+
subagents: resolveOrdinaryField(SUBAGENTS_ORDER, {
|
|
540
|
+
project: parseCustomSubagents(project?.subagents),
|
|
541
|
+
user: parseCustomSubagents(user?.subagents),
|
|
542
|
+
builtin: undefined,
|
|
543
|
+
}),
|
|
486
544
|
cloud: {
|
|
487
545
|
repo: resolveOrdinaryField(CLOUD_ORDER, {
|
|
488
546
|
cli: cli?.cloud?.repo,
|
|
@@ -563,6 +621,7 @@ export function resolveCursorSdkConfig(options = {}) {
|
|
|
563
621
|
}),
|
|
564
622
|
},
|
|
565
623
|
local: {
|
|
624
|
+
storeRoot: resolveCursorLocalStoreRoot({ env: options.env, user }),
|
|
566
625
|
autoReview: resolveOrdinaryField(LOCAL_ORDER, {
|
|
567
626
|
cli: cli?.local?.autoReview,
|
|
568
627
|
environment: env.local?.autoReview,
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { accessSync, closeSync, constants, fchmodSync, fstatSync, lstatSync, mkdirSync, openSync, realpathSync, } from "node:fs";
|
|
2
|
+
import { isAbsolute, join, parse, resolve, sep } from "node:path";
|
|
3
|
+
import { noFollowFlag, openExistingRegularFileNoFollow, sameFileIdentity } from "./cursor-durable-fs.js";
|
|
4
|
+
/** Lexical only: capture selection before acquisition awaits; fileless callers skip it. */
|
|
5
|
+
export function normalizeCursorCustomStoreRoot(value) {
|
|
6
|
+
const root = parse(value).root;
|
|
7
|
+
const components = value.slice(root.length).split(process.platform === "win32" ? /[\\/]/ : sep);
|
|
8
|
+
if (!isAbsolute(value) || !root || value.includes("\0") || components.some(part => part === "." || part === "..") ||
|
|
9
|
+
(process.platform === "win32" && (!/^(?:[A-Za-z]:[\\/]|[\\/]{2}[^\\/]+[\\/][^\\/]+[\\/]?)$/.test(root) ||
|
|
10
|
+
/^[\\/]{2}[?.][\\/]/.test(value)))) {
|
|
11
|
+
throw new Error("Cursor local storeRoot must be a native fully qualified absolute path without dot components or device prefixes");
|
|
12
|
+
}
|
|
13
|
+
const normalized = resolve(value);
|
|
14
|
+
if (normalized === resolve(root))
|
|
15
|
+
throw new Error("Cursor local storeRoot must not be a filesystem or share root");
|
|
16
|
+
return normalized;
|
|
17
|
+
}
|
|
18
|
+
function invalid(path, reason) {
|
|
19
|
+
throw new Error(`Cursor custom local store path ${reason}: ${path}`);
|
|
20
|
+
}
|
|
21
|
+
function statIfPresent(path) {
|
|
22
|
+
try {
|
|
23
|
+
return lstatSync(path);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === "ENOENT")
|
|
27
|
+
return undefined;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function assertDirectory(path, stat, privateDirectory, afterShared) {
|
|
32
|
+
if (!stat.isDirectory())
|
|
33
|
+
invalid(path, "contains a link or non-directory");
|
|
34
|
+
if (process.platform === "win32")
|
|
35
|
+
return;
|
|
36
|
+
const uid = process.getuid();
|
|
37
|
+
if (privateDirectory || afterShared) {
|
|
38
|
+
if (stat.uid !== uid)
|
|
39
|
+
invalid(path, "is not owned by the current user");
|
|
40
|
+
}
|
|
41
|
+
else if (stat.uid !== 0 && stat.uid !== uid)
|
|
42
|
+
invalid(path, "has an untrusted owner");
|
|
43
|
+
const trustedShared = !privateDirectory && !afterShared && stat.uid === 0 && (stat.mode & 0o1000) !== 0;
|
|
44
|
+
if ((stat.mode & 0o022) !== 0 && !trustedShared)
|
|
45
|
+
invalid(path, "is group or other writable");
|
|
46
|
+
if (privateDirectory && (stat.mode & 0o300) !== 0o300)
|
|
47
|
+
invalid(path, "is not owner writable/searchable");
|
|
48
|
+
}
|
|
49
|
+
function restrictPrivateDirectory(path, before) {
|
|
50
|
+
if (process.platform !== "win32") {
|
|
51
|
+
const fd = openSync(path, constants.O_RDONLY | noFollowFlag());
|
|
52
|
+
try {
|
|
53
|
+
const opened = fstatSync(fd);
|
|
54
|
+
if (!opened.isDirectory() || !sameFileIdentity(before, opened) || !sameFileIdentity(opened, lstatSync(path))) {
|
|
55
|
+
invalid(path, "changed while opening");
|
|
56
|
+
}
|
|
57
|
+
fchmodSync(fd, 0o700);
|
|
58
|
+
const after = lstatSync(path);
|
|
59
|
+
if (!after.isDirectory() || !sameFileIdentity(opened, after))
|
|
60
|
+
invalid(path, "changed while restricting permissions");
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
closeSync(fd);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
accessSync(path, constants.W_OK | constants.X_OK);
|
|
67
|
+
}
|
|
68
|
+
function assertTrustedSystemTarget(target) {
|
|
69
|
+
let path = parse(target).root;
|
|
70
|
+
for (const part of ["", ...target.slice(path.length).split(sep).filter(Boolean)]) {
|
|
71
|
+
path = join(path, part);
|
|
72
|
+
const stat = lstatSync(path);
|
|
73
|
+
if (!stat.isDirectory() || stat.uid !== 0 || ((stat.mode & 0o022) !== 0 && !(stat.mode & 0o1000))) {
|
|
74
|
+
invalid(path, "has an untrusted system-link target");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Verify ancestors before individually creating components; never realpath an arbitrary user tree. */
|
|
79
|
+
export function prepareCursorCustomStoreRoot(selectedRoot) {
|
|
80
|
+
const normalized = normalizeCursorCustomStoreRoot(selectedRoot);
|
|
81
|
+
let path = parse(normalized).root;
|
|
82
|
+
let afterShared = false;
|
|
83
|
+
const components = normalized.slice(path.length).split(sep).filter(Boolean);
|
|
84
|
+
assertDirectory(path, lstatSync(path), false, false);
|
|
85
|
+
for (const [index, part] of components.entries()) {
|
|
86
|
+
path = join(path, part);
|
|
87
|
+
const leaf = index === components.length - 1;
|
|
88
|
+
let stat = statIfPresent(path);
|
|
89
|
+
if (stat?.isSymbolicLink()) {
|
|
90
|
+
if (process.platform === "win32" || leaf || afterShared || stat.uid !== 0)
|
|
91
|
+
invalid(path, "contains a link or non-directory");
|
|
92
|
+
const target = realpathSync(path);
|
|
93
|
+
assertTrustedSystemTarget(target);
|
|
94
|
+
path = target;
|
|
95
|
+
stat = lstatSync(path);
|
|
96
|
+
}
|
|
97
|
+
if (!stat) {
|
|
98
|
+
try {
|
|
99
|
+
mkdirSync(path, { mode: 0o700 });
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error.code !== "EEXIST")
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
stat = lstatSync(path);
|
|
106
|
+
}
|
|
107
|
+
assertDirectory(path, stat, leaf, afterShared);
|
|
108
|
+
if (leaf)
|
|
109
|
+
restrictPrivateDirectory(path, stat);
|
|
110
|
+
if (process.platform !== "win32" && stat.uid === 0 && (stat.mode & 0o022) !== 0)
|
|
111
|
+
afterShared = true;
|
|
112
|
+
}
|
|
113
|
+
return path;
|
|
114
|
+
}
|
|
115
|
+
/** Called after exact admission and again immediately before/after the public pathname-based SDK open. */
|
|
116
|
+
export function guardCursorCustomStorePath(customRoot, stateRoot) {
|
|
117
|
+
if (prepareCursorCustomStoreRoot(customRoot) !== customRoot)
|
|
118
|
+
invalid(customRoot, "changed canonical identity");
|
|
119
|
+
const directories = [{ path: customRoot, stat: lstatSync(customRoot) }];
|
|
120
|
+
let path = customRoot;
|
|
121
|
+
for (const part of stateRoot.slice(customRoot.length + 1).split(sep)) {
|
|
122
|
+
path = join(path, part);
|
|
123
|
+
if (!statIfPresent(path)) {
|
|
124
|
+
try {
|
|
125
|
+
mkdirSync(path, { mode: 0o700 });
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error.code !== "EEXIST")
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const stat = lstatSync(path);
|
|
133
|
+
assertDirectory(path, stat, true, true);
|
|
134
|
+
restrictPrivateDirectory(path, stat);
|
|
135
|
+
directories.push({ path, stat });
|
|
136
|
+
}
|
|
137
|
+
const leaves = ["index.db", "index.db-wal", "index.db-shm", "index.db-journal"];
|
|
138
|
+
const originalLeaves = new Map();
|
|
139
|
+
const checkLeaves = () => {
|
|
140
|
+
for (const name of leaves) {
|
|
141
|
+
const file = join(stateRoot, name);
|
|
142
|
+
const stat = statIfPresent(file);
|
|
143
|
+
if (!stat) {
|
|
144
|
+
if (name === "index.db" && originalLeaves.has(file))
|
|
145
|
+
invalid(file, "disappeared SQLite file");
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (!stat.isFile() || stat.nlink !== 1)
|
|
149
|
+
invalid(file, "contains a linked or nonregular SQLite file");
|
|
150
|
+
if (process.platform !== "win32" && (stat.uid !== process.getuid() || (stat.mode & 0o022))) {
|
|
151
|
+
invalid(file, "contains an unowned or shared SQLite file");
|
|
152
|
+
}
|
|
153
|
+
const before = originalLeaves.get(file);
|
|
154
|
+
if (before && !sameFileIdentity(before, stat))
|
|
155
|
+
invalid(file, "changed SQLite file identity");
|
|
156
|
+
const fd = openExistingRegularFileNoFollow(file, constants.O_RDWR);
|
|
157
|
+
closeSync(fd);
|
|
158
|
+
originalLeaves.set(file, stat);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
checkLeaves();
|
|
162
|
+
// ponytail: the public SDK uses pathname/lazy checkpoint opens. This guards
|
|
163
|
+
// current-user private contents, not hostile same-user/admin races. Windows
|
|
164
|
+
// rejects Node-visible links/junctions but has no ACL hardening/O_NOFOLLOW
|
|
165
|
+
// equivalent here; use an ACL-protected root. Upgrade with public native APIs.
|
|
166
|
+
return { verify() {
|
|
167
|
+
if (prepareCursorCustomStoreRoot(customRoot) !== customRoot)
|
|
168
|
+
invalid(customRoot, "changed canonical identity");
|
|
169
|
+
for (const { path, stat } of directories) {
|
|
170
|
+
const after = lstatSync(path);
|
|
171
|
+
assertDirectory(path, after, true, true);
|
|
172
|
+
if (!sameFileIdentity(stat, after))
|
|
173
|
+
invalid(path, "changed directory identity");
|
|
174
|
+
}
|
|
175
|
+
checkLeaves();
|
|
176
|
+
} };
|
|
177
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { buildCursorModelSelection, getCursorModelMetadata } from "./model-discovery.js";
|
|
2
|
+
export function buildCursorCustomSubagentDefinitions(config) {
|
|
3
|
+
if (!config || !Object.keys(config).length)
|
|
4
|
+
return undefined;
|
|
5
|
+
return Object.fromEntries(Object.entries(config).map(([name, entry]) => [name, {
|
|
6
|
+
description: entry.description,
|
|
7
|
+
prompt: entry.prompt,
|
|
8
|
+
...(entry.model === undefined ? {} : {
|
|
9
|
+
model: entry.model === "inherit" ? "inherit" : buildCursorModelSelection(entry.model, entry.thinking ?? "off", getCursorModelMetadata(entry.model)?.fastOverride ?? entry.fast),
|
|
10
|
+
}),
|
|
11
|
+
}]));
|
|
12
|
+
}
|
|
13
|
+
// ponytail: SDK 1.0.36 LOCAL conversion keeps only model ID/inherit; it drops params.
|
|
14
|
+
// Upgrade this claim only after the installed public converter preserves them.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated with @cursor/sdk@1.0.
|
|
1
|
+
// Generated with @cursor/sdk@1.0.36 from 45 Cursor models.
|
|
2
2
|
// Refresh with: npm run refresh:cursor-snapshots -- --write
|
|
3
3
|
// Do not add secrets; this file stores public model metadata only.
|
|
4
4
|
export const FALLBACK_MODEL_ITEMS = [
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { isCursorModel } from "./cursor-model.js";
|
|
2
2
|
import { registerCursorModelLifecycle } from "./cursor-model-lifecycle.js";
|
|
3
3
|
import { cursorSessionScopeKeyForManager } from "./cursor-session-scope.js";
|
|
4
|
-
export function registerCursorFallbackIssueWarning(pi
|
|
4
|
+
export function registerCursorFallbackIssueWarning(pi) {
|
|
5
|
+
let issue;
|
|
5
6
|
const warnedSessionScopeKeys = new Set();
|
|
6
7
|
registerCursorModelLifecycle(pi, (ctx) => {
|
|
7
|
-
if (!isCursorModel(ctx.model) || !ctx.hasUI)
|
|
8
|
+
if (!issue || !isCursorModel(ctx.model) || !ctx.hasUI)
|
|
8
9
|
return;
|
|
9
10
|
const scopeKey = cursorSessionScopeKeyForManager(ctx.sessionManager);
|
|
10
11
|
if (warnedSessionScopeKeys.has(scopeKey))
|
|
@@ -12,4 +13,9 @@ export function registerCursorFallbackIssueWarning(pi, issue) {
|
|
|
12
13
|
warnedSessionScopeKeys.add(scopeKey);
|
|
13
14
|
ctx.ui.notify(issue.message, "warning");
|
|
14
15
|
});
|
|
16
|
+
return (nextIssue) => {
|
|
17
|
+
if (nextIssue?.reason !== issue?.reason || nextIssue?.message !== issue?.message)
|
|
18
|
+
warnedSessionScopeKeys.clear();
|
|
19
|
+
issue = nextIssue;
|
|
20
|
+
};
|
|
15
21
|
}
|
|
@@ -171,6 +171,11 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
171
171
|
leased: false,
|
|
172
172
|
leaseQueue: [],
|
|
173
173
|
});
|
|
174
|
+
const state = getPrivateState(run);
|
|
175
|
+
state.pendingCallUnsubscribers = [...new Set([run.bridgeRun, run.sessionBridgeRun])].flatMap((bridge) => bridge ? [bridge.onPendingToolCallsChanged(() => {
|
|
176
|
+
if (state.idleDisposeRequested || state.idleDisposeTimer)
|
|
177
|
+
coordinator.requestIdleDispose(run);
|
|
178
|
+
})] : []);
|
|
174
179
|
pendingRuns.set(run.id, run);
|
|
175
180
|
pendingRunIdsByScopeKey.set(sessionAgentScopeKey, run.id);
|
|
176
181
|
return run;
|
|
@@ -343,10 +348,16 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
343
348
|
const state = getPrivateState(run);
|
|
344
349
|
clearIdleDisposeTimer(run);
|
|
345
350
|
state.idleDisposeRequested = true;
|
|
346
|
-
if (state.leased || state.leaseQueue.length > 0
|
|
351
|
+
if (state.leased || state.leaseQueue.length > 0 ||
|
|
352
|
+
[run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls()))
|
|
347
353
|
return;
|
|
348
|
-
state.idleDisposeRequested = false;
|
|
349
354
|
state.idleDisposeTimer = setTimeout(() => {
|
|
355
|
+
state.idleDisposeTimer = undefined;
|
|
356
|
+
if (state.leased || state.leaseQueue.length > 0 ||
|
|
357
|
+
[run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls())) {
|
|
358
|
+
coordinator.requestIdleDispose(run);
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
350
361
|
void coordinator.release(run).catch(() => {
|
|
351
362
|
// Idle dispose must not leave release failures as unhandled rejections.
|
|
352
363
|
});
|
|
@@ -362,6 +373,15 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
362
373
|
return;
|
|
363
374
|
const abandoned = !isSuccessfulCursorLiveRun(run);
|
|
364
375
|
run.disposed = true;
|
|
376
|
+
for (const unsubscribe of state.pendingCallUnsubscribers ?? []) {
|
|
377
|
+
try {
|
|
378
|
+
unsubscribe();
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
// Cleanup continues even if an observer cannot detach.
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
state.pendingCallUnsubscribers = [];
|
|
365
385
|
unregister(run);
|
|
366
386
|
clearIdleDisposeTimer(run);
|
|
367
387
|
state.idleDisposeRequested = false;
|
|
@@ -60,7 +60,9 @@ export function isCursorSdkMcpToolTimeoutStack(stack) {
|
|
|
60
60
|
export function isCursorSdkMcpConnectTimeoutStack(stack) {
|
|
61
61
|
if (!stack || !isCursorSdkMcpProtocolTimeoutStack(stack))
|
|
62
62
|
return false;
|
|
63
|
-
|
|
63
|
+
// SDK 1.0.36 minifies the Client class name; the protocol method and SDK
|
|
64
|
+
// frame, not that constructor's spelling, establish this timeout purpose.
|
|
65
|
+
return /^\s*at (?:[\w$]+\.)?(?:connect|listTools|getTools)\s*\(.*(?:node_modules[/\\]@cursor[/\\]sdk|@cursor\/sdk\/dist)/m.test(stack);
|
|
64
66
|
}
|
|
65
67
|
function isCursorSdkDefaultMcpTimeout(delay) {
|
|
66
68
|
return typeof delay === "number" && delay === CURSOR_SDK_MCP_DEFAULT_TIMEOUT_MS;
|