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/src/cursor-api-key.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { envApiKeyAuth, type ApiKeyAuth, type ApiKeyCredential } from "@earendil-works/pi-ai";
|
|
2
|
+
import { parseEnvBoolean } from "./cursor-env-boolean.js";
|
|
2
3
|
|
|
3
4
|
export const CURSOR_API_KEY_ENV_VAR = "CURSOR_API_KEY";
|
|
4
|
-
const CURSOR_PROVIDER_ID = "cursor";
|
|
5
5
|
|
|
6
|
-
//
|
|
7
|
-
// values as unconfigured when the env var is absent, which hides fallback models
|
|
8
|
-
// before `/login`. Keep the provider available and resolve the real key in the
|
|
9
|
-
// Cursor provider turn path from pi auth or CURSOR_API_KEY.
|
|
6
|
+
// Legacy no-auth availability policy only; never a configured models.json key.
|
|
10
7
|
export const CURSOR_API_KEY_CONFIG_VALUE = "pi-cursor-sdk-cursor-api-key-placeholder";
|
|
11
8
|
|
|
12
9
|
const CURSOR_API_KEY_PLACEHOLDERS = new Set([
|
|
@@ -17,21 +14,44 @@ const CURSOR_API_KEY_PLACEHOLDERS = new Set([
|
|
|
17
14
|
]);
|
|
18
15
|
|
|
19
16
|
export function resolveCursorApiKey(apiKey?: string): string | undefined {
|
|
17
|
+
return normalizeCursorApiKey(apiKey) ?? (apiKey && CURSOR_API_KEY_PLACEHOLDERS.has(apiKey.trim())
|
|
18
|
+
? normalizeCursorApiKey(process.env.CURSOR_API_KEY) : undefined);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function normalizeCursorApiKey(apiKey?: string): string | undefined {
|
|
20
22
|
const trimmed = apiKey?.trim();
|
|
21
|
-
if (!trimmed) return undefined;
|
|
22
|
-
if (CURSOR_API_KEY_PLACEHOLDERS.has(trimmed)) return process.env.CURSOR_API_KEY?.trim() || undefined;
|
|
23
|
+
if (!trimmed || CURSOR_API_KEY_PLACEHOLDERS.has(trimmed)) return undefined;
|
|
23
24
|
return trimmed;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
export async function resolveCursorCredentialApiKey(
|
|
28
|
+
credential: ApiKeyCredential | undefined,
|
|
29
|
+
environment: () => Promise<string | undefined>,
|
|
30
|
+
): Promise<string | undefined> {
|
|
31
|
+
return normalizeCursorApiKey(credential?.key)
|
|
32
|
+
?? normalizeCursorApiKey(credential?.env?.CURSOR_API_KEY)
|
|
33
|
+
?? normalizeCursorApiKey(await environment());
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
export function
|
|
36
|
-
|
|
36
|
+
export function cursorApiKeyAuth(): ApiKeyAuth {
|
|
37
|
+
const standard = envApiKeyAuth("Cursor API key", [CURSOR_API_KEY_ENV_VAR]);
|
|
38
|
+
const auth: ApiKeyAuth = {
|
|
39
|
+
name: standard.name,
|
|
40
|
+
login: standard.login,
|
|
41
|
+
async check(input) {
|
|
42
|
+
const resolved = await auth.resolve(input);
|
|
43
|
+
return resolved ? { type: "api_key", source: resolved.source } : undefined;
|
|
44
|
+
},
|
|
45
|
+
async resolve({ ctx, credential, signal }) {
|
|
46
|
+
signal.throwIfAborted();
|
|
47
|
+
const key = await resolveCursorCredentialApiKey(credential, () => ctx.env(CURSOR_API_KEY_ENV_VAR));
|
|
48
|
+
signal.throwIfAborted();
|
|
49
|
+
if (key) return { auth: { apiKey: key }, env: credential?.env, source: credential ? "stored credential" : CURSOR_API_KEY_ENV_VAR };
|
|
50
|
+
if (!parseEnvBoolean(process.env.PI_CURSOR_HIDE_MODELS_WHEN_LOGGED_OUT, false)) {
|
|
51
|
+
return { auth: { apiKey: CURSOR_API_KEY_CONFIG_VALUE }, source: "fallback" };
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
return auth;
|
|
37
57
|
}
|
|
@@ -49,6 +49,7 @@ export function buildCursorCloudAgentOptions(options: {
|
|
|
49
49
|
agentMode: AgentModeOption;
|
|
50
50
|
resolvedConfig: CursorResolvedSdkConfig;
|
|
51
51
|
name?: string;
|
|
52
|
+
agents?: AgentOptions["agents"];
|
|
52
53
|
}): AgentOptions {
|
|
53
54
|
const { resolvedConfig } = options;
|
|
54
55
|
const environment = resolvedConfig.cloud.environment.value;
|
|
@@ -91,6 +92,7 @@ export function buildCursorCloudAgentOptions(options: {
|
|
|
91
92
|
model: options.modelSelection,
|
|
92
93
|
mode: options.agentMode,
|
|
93
94
|
...(options.name ? { name: options.name } : {}),
|
|
95
|
+
...(options.agents && Object.keys(options.agents).length ? { agents: options.agents } : {}),
|
|
94
96
|
cloud,
|
|
95
97
|
};
|
|
96
98
|
}
|
package/src/cursor-config.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from "node:fs";
|
|
14
14
|
import { dirname, join } from "node:path";
|
|
15
15
|
import { CONFIG_DIR_NAME, getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
16
|
+
import type { ModelThinkingLevel } from "@earendil-works/pi-ai";
|
|
16
17
|
import { parseOptionalEnvBoolean } from "./cursor-env-boolean.js";
|
|
17
18
|
import { asRecord } from "./cursor-record-utils.js";
|
|
18
19
|
|
|
@@ -36,6 +37,7 @@ export const CURSOR_SANDBOX_ENV = "PI_CURSOR_SANDBOX";
|
|
|
36
37
|
export const CURSOR_LOCAL_FORCE_ENV = "PI_CURSOR_LOCAL_FORCE";
|
|
37
38
|
export const CURSOR_LOCAL_RESUME_ENV = "PI_CURSOR_LOCAL_RESUME";
|
|
38
39
|
export const CURSOR_HTTP1_ENV = "PI_CURSOR_HTTP_1_1";
|
|
40
|
+
export const CURSOR_STATE_ROOT_ENV = "PI_CURSOR_SDK_STATE_ROOT";
|
|
39
41
|
|
|
40
42
|
export type CursorConfigSource = "cli" | "environment" | "project" | "user" | "session" | "model-alias" | "builtin";
|
|
41
43
|
export type CursorConfigTrustLevel = "one-shot" | "environment" | "trusted-project" | "user" | "session" | "model-catalog" | "builtin";
|
|
@@ -48,9 +50,20 @@ export interface CursorCloudEnvironmentConfig {
|
|
|
48
50
|
name?: string;
|
|
49
51
|
}
|
|
50
52
|
|
|
53
|
+
export interface CursorCustomSubagentConfig {
|
|
54
|
+
description: string;
|
|
55
|
+
prompt: string;
|
|
56
|
+
model?: string;
|
|
57
|
+
thinking?: ModelThinkingLevel;
|
|
58
|
+
fast?: boolean;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export type CursorCustomSubagentsConfig = Record<string, CursorCustomSubagentConfig>;
|
|
62
|
+
|
|
51
63
|
export interface CursorSdkConfig {
|
|
52
64
|
fastDefaults?: Record<string, boolean>;
|
|
53
65
|
runtime?: CursorRuntime;
|
|
66
|
+
subagents?: CursorCustomSubagentsConfig;
|
|
54
67
|
cloud?: {
|
|
55
68
|
repo?: string;
|
|
56
69
|
branch?: string;
|
|
@@ -73,6 +86,7 @@ export interface CursorSdkConfig {
|
|
|
73
86
|
force?: boolean;
|
|
74
87
|
resume?: boolean;
|
|
75
88
|
useHttp1ForAgent?: boolean;
|
|
89
|
+
storeRoot?: string;
|
|
76
90
|
};
|
|
77
91
|
}
|
|
78
92
|
|
|
@@ -94,6 +108,7 @@ export interface CursorResolvedSetting<T> {
|
|
|
94
108
|
|
|
95
109
|
export interface CursorResolvedSdkConfig {
|
|
96
110
|
runtime: CursorResolvedSetting<CursorRuntime>;
|
|
111
|
+
subagents: CursorResolvedSetting<CursorCustomSubagentsConfig | undefined>;
|
|
97
112
|
cloud: {
|
|
98
113
|
repo: CursorResolvedSetting<string | undefined>;
|
|
99
114
|
branch: CursorResolvedSetting<string | undefined>;
|
|
@@ -113,6 +128,7 @@ export interface CursorResolvedSdkConfig {
|
|
|
113
128
|
force: CursorResolvedSetting<boolean>;
|
|
114
129
|
resume: CursorResolvedSetting<boolean>;
|
|
115
130
|
useHttp1ForAgent: CursorResolvedSetting<boolean>;
|
|
131
|
+
storeRoot: CursorResolvedSetting<string | undefined>;
|
|
116
132
|
};
|
|
117
133
|
}
|
|
118
134
|
|
|
@@ -237,6 +253,44 @@ function parseCloudEnvironment(value: unknown): CursorCloudEnvironmentConfig | u
|
|
|
237
253
|
return Object.keys(parsed).length > 0 ? parsed : undefined;
|
|
238
254
|
}
|
|
239
255
|
|
|
256
|
+
const THINKING_LEVELS = {
|
|
257
|
+
off: true,
|
|
258
|
+
minimal: true,
|
|
259
|
+
low: true,
|
|
260
|
+
medium: true,
|
|
261
|
+
high: true,
|
|
262
|
+
xhigh: true,
|
|
263
|
+
max: true,
|
|
264
|
+
} satisfies Record<ModelThinkingLevel, true>;
|
|
265
|
+
|
|
266
|
+
function isCursorSubagentThinkingLevel(value: unknown): value is ModelThinkingLevel {
|
|
267
|
+
return typeof value === "string" && Object.hasOwn(THINKING_LEVELS, value);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function parseCustomSubagents(value: unknown): CursorCustomSubagentsConfig | undefined {
|
|
271
|
+
const record = asRecord(value);
|
|
272
|
+
if (!record) return undefined;
|
|
273
|
+
const entries: Array<[string, CursorCustomSubagentConfig]> = [];
|
|
274
|
+
for (const [name, raw] of Object.entries(record)) {
|
|
275
|
+
// Extension config policy, not an upstream SDK naming restriction.
|
|
276
|
+
if (!/^[A-Za-z][A-Za-z0-9._-]{0,63}$/.test(name)) continue;
|
|
277
|
+
const entry = asRecord(raw);
|
|
278
|
+
const description = parseNonEmptyString(entry?.description);
|
|
279
|
+
const prompt = parseNonEmptyString(entry?.prompt);
|
|
280
|
+
if (!entry || !description || !prompt) continue;
|
|
281
|
+
const model = parseNonEmptyString(entry.model);
|
|
282
|
+
const thinking = entry.thinking;
|
|
283
|
+
entries.push([name, {
|
|
284
|
+
description,
|
|
285
|
+
prompt,
|
|
286
|
+
...(model ? { model } : {}),
|
|
287
|
+
...(isCursorSubagentThinkingLevel(thinking) ? { thinking } : {}),
|
|
288
|
+
...(typeof entry.fast === "boolean" ? { fast: entry.fast } : {}),
|
|
289
|
+
}]);
|
|
290
|
+
}
|
|
291
|
+
return entries.length ? Object.fromEntries(entries) : undefined;
|
|
292
|
+
}
|
|
293
|
+
|
|
240
294
|
export function parseCursorSdkConfig(value: unknown): CursorSdkConfig | undefined {
|
|
241
295
|
const record = asRecord(value);
|
|
242
296
|
if (!record) return undefined;
|
|
@@ -244,6 +298,9 @@ export function parseCursorSdkConfig(value: unknown): CursorSdkConfig | undefine
|
|
|
244
298
|
|
|
245
299
|
if (isCursorRuntime(record.runtime)) config.runtime = record.runtime;
|
|
246
300
|
|
|
301
|
+
const subagents = parseCustomSubagents(record.subagents);
|
|
302
|
+
if (subagents) config.subagents = subagents;
|
|
303
|
+
|
|
247
304
|
const fastDefaults = asRecord(record.fastDefaults);
|
|
248
305
|
if (fastDefaults) {
|
|
249
306
|
config.fastDefaults = Object.fromEntries(
|
|
@@ -275,6 +332,7 @@ export function parseCursorSdkConfig(value: unknown): CursorSdkConfig | undefine
|
|
|
275
332
|
const local = asRecord(record.local);
|
|
276
333
|
if (local) {
|
|
277
334
|
const parsedLocal: NonNullable<CursorSdkConfig["local"]> = {};
|
|
335
|
+
if (typeof local.storeRoot === "string" && local.storeRoot.trim()) parsedLocal.storeRoot = local.storeRoot;
|
|
278
336
|
if (typeof local.autoReview === "boolean") parsedLocal.autoReview = local.autoReview;
|
|
279
337
|
if (typeof local.sandbox === "boolean") parsedLocal.sandbox = local.sandbox;
|
|
280
338
|
if (typeof local.force === "boolean") parsedLocal.force = local.force;
|
|
@@ -533,6 +591,8 @@ const CLOUD_ORDER: CursorFieldSource[] = ["cli", "environment", "session", "user
|
|
|
533
591
|
const LOCAL_ORDER: CursorFieldSource[] = ["cli", "environment", "project", "user", "builtin"];
|
|
534
592
|
const LOCAL_FORCE_ORDER: CursorFieldSource[] = ["cli", "environment", "builtin"];
|
|
535
593
|
const HTTP1_ORDER: CursorFieldSource[] = ["session", "environment", "user", "builtin"];
|
|
594
|
+
const SUBAGENTS_ORDER: CursorFieldSource[] = ["project", "user", "builtin"];
|
|
595
|
+
const STORE_ROOT_ORDER: CursorFieldSource[] = ["environment", "user", "builtin"];
|
|
536
596
|
|
|
537
597
|
function buildFieldLayers<T>(order: CursorFieldSource[], values: CursorFieldValues<T>): Array<CursorResolvedSetting<T> | undefined> {
|
|
538
598
|
return order.map((source) => (source === "builtin" ? resolved("builtin", values.builtin as T) : valueFrom(source, values[source])));
|
|
@@ -550,6 +610,16 @@ function resolveEnvNamesSafetyField(order: CursorFieldSource[], values: CursorFi
|
|
|
550
610
|
return resolveWithCap(buildFieldLayers(order, values), valueFrom("user", values.user), envNamesCap);
|
|
551
611
|
}
|
|
552
612
|
|
|
613
|
+
export function resolveCursorLocalStoreRoot(
|
|
614
|
+
{ env = process.env, user }: Pick<ResolveCursorSdkConfigOptions, "env" | "user"> = {},
|
|
615
|
+
): CursorResolvedSetting<string | undefined> {
|
|
616
|
+
return resolveOrdinaryField(STORE_ROOT_ORDER, {
|
|
617
|
+
environment: env[CURSOR_STATE_ROOT_ENV]?.trim() ? env[CURSOR_STATE_ROOT_ENV] : undefined,
|
|
618
|
+
user: user?.local?.storeRoot?.trim() ? user.local.storeRoot : undefined,
|
|
619
|
+
builtin: undefined,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
|
|
553
623
|
export function cursorSdkConfigFromEnv(env: Record<string, string | undefined> = process.env): CursorSdkConfig {
|
|
554
624
|
const config: CursorSdkConfig = {};
|
|
555
625
|
const runtime = validateExplicitValue(env[CURSOR_RUNTIME_ENV], CURSOR_RUNTIME_ENV, isCursorRuntime, '"local" or "cloud"');
|
|
@@ -648,6 +718,11 @@ export function resolveCursorSdkConfig(options: ResolveCursorSdkConfigOptions =
|
|
|
648
718
|
},
|
|
649
719
|
(value) => (value === "cloud" ? 1 : 0),
|
|
650
720
|
),
|
|
721
|
+
subagents: resolveOrdinaryField(SUBAGENTS_ORDER, {
|
|
722
|
+
project: parseCustomSubagents(project?.subagents),
|
|
723
|
+
user: parseCustomSubagents(user?.subagents),
|
|
724
|
+
builtin: undefined,
|
|
725
|
+
}),
|
|
651
726
|
cloud: {
|
|
652
727
|
repo: resolveOrdinaryField(CLOUD_ORDER, {
|
|
653
728
|
cli: cli?.cloud?.repo,
|
|
@@ -752,6 +827,7 @@ export function resolveCursorSdkConfig(options: ResolveCursorSdkConfigOptions =
|
|
|
752
827
|
}),
|
|
753
828
|
},
|
|
754
829
|
local: {
|
|
830
|
+
storeRoot: resolveCursorLocalStoreRoot({ env: options.env, user }),
|
|
755
831
|
autoReview: resolveOrdinaryField(LOCAL_ORDER, {
|
|
756
832
|
cli: cli?.local?.autoReview,
|
|
757
833
|
environment: env.local?.autoReview,
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import {
|
|
2
|
+
accessSync, closeSync, constants, fchmodSync, fstatSync, lstatSync, mkdirSync,
|
|
3
|
+
openSync, realpathSync, type Stats,
|
|
4
|
+
} from "node:fs";
|
|
5
|
+
import { isAbsolute, join, parse, resolve, sep } from "node:path";
|
|
6
|
+
import { noFollowFlag, openExistingRegularFileNoFollow, sameFileIdentity } from "./cursor-durable-fs.js";
|
|
7
|
+
|
|
8
|
+
/** Lexical only: capture selection before acquisition awaits; fileless callers skip it. */
|
|
9
|
+
export function normalizeCursorCustomStoreRoot(value: string): string {
|
|
10
|
+
const root = parse(value).root;
|
|
11
|
+
const components = value.slice(root.length).split(process.platform === "win32" ? /[\\/]/ : sep);
|
|
12
|
+
if (!isAbsolute(value) || !root || value.includes("\0") || components.some(part => part === "." || part === "..") ||
|
|
13
|
+
(process.platform === "win32" && (!/^(?:[A-Za-z]:[\\/]|[\\/]{2}[^\\/]+[\\/][^\\/]+[\\/]?)$/.test(root) ||
|
|
14
|
+
/^[\\/]{2}[?.][\\/]/.test(value)))) {
|
|
15
|
+
throw new Error("Cursor local storeRoot must be a native fully qualified absolute path without dot components or device prefixes");
|
|
16
|
+
}
|
|
17
|
+
const normalized = resolve(value);
|
|
18
|
+
if (normalized === resolve(root)) throw new Error("Cursor local storeRoot must not be a filesystem or share root");
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function invalid(path: string, reason: string): never {
|
|
23
|
+
throw new Error(`Cursor custom local store path ${reason}: ${path}`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function statIfPresent(path: string): Stats | undefined {
|
|
27
|
+
try { return lstatSync(path); }
|
|
28
|
+
catch (error) { if ((error as NodeJS.ErrnoException).code === "ENOENT") return undefined; throw error; }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function assertDirectory(path: string, stat: Stats, privateDirectory: boolean, afterShared: boolean): void {
|
|
32
|
+
if (!stat.isDirectory()) invalid(path, "contains a link or non-directory");
|
|
33
|
+
if (process.platform === "win32") return;
|
|
34
|
+
const uid = process.getuid!();
|
|
35
|
+
if (privateDirectory || afterShared) {
|
|
36
|
+
if (stat.uid !== uid) invalid(path, "is not owned by the current user");
|
|
37
|
+
} else if (stat.uid !== 0 && stat.uid !== uid) invalid(path, "has an untrusted owner");
|
|
38
|
+
const trustedShared = !privateDirectory && !afterShared && stat.uid === 0 && (stat.mode & 0o1000) !== 0;
|
|
39
|
+
if ((stat.mode & 0o022) !== 0 && !trustedShared) invalid(path, "is group or other writable");
|
|
40
|
+
if (privateDirectory && (stat.mode & 0o300) !== 0o300) invalid(path, "is not owner writable/searchable");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function restrictPrivateDirectory(path: string, before: Stats): void {
|
|
44
|
+
if (process.platform !== "win32") {
|
|
45
|
+
const fd = openSync(path, constants.O_RDONLY | noFollowFlag());
|
|
46
|
+
try {
|
|
47
|
+
const opened = fstatSync(fd);
|
|
48
|
+
if (!opened.isDirectory() || !sameFileIdentity(before, opened) || !sameFileIdentity(opened, lstatSync(path))) {
|
|
49
|
+
invalid(path, "changed while opening");
|
|
50
|
+
}
|
|
51
|
+
fchmodSync(fd, 0o700);
|
|
52
|
+
const after = lstatSync(path);
|
|
53
|
+
if (!after.isDirectory() || !sameFileIdentity(opened, after)) invalid(path, "changed while restricting permissions");
|
|
54
|
+
} finally { closeSync(fd); }
|
|
55
|
+
}
|
|
56
|
+
accessSync(path, constants.W_OK | constants.X_OK);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function assertTrustedSystemTarget(target: string): void {
|
|
60
|
+
let path = parse(target).root;
|
|
61
|
+
for (const part of ["", ...target.slice(path.length).split(sep).filter(Boolean)]) {
|
|
62
|
+
path = join(path, part);
|
|
63
|
+
const stat = lstatSync(path);
|
|
64
|
+
if (!stat.isDirectory() || stat.uid !== 0 || ((stat.mode & 0o022) !== 0 && !(stat.mode & 0o1000))) {
|
|
65
|
+
invalid(path, "has an untrusted system-link target");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Verify ancestors before individually creating components; never realpath an arbitrary user tree. */
|
|
71
|
+
export function prepareCursorCustomStoreRoot(selectedRoot: string): string {
|
|
72
|
+
const normalized = normalizeCursorCustomStoreRoot(selectedRoot);
|
|
73
|
+
let path = parse(normalized).root;
|
|
74
|
+
let afterShared = false;
|
|
75
|
+
const components = normalized.slice(path.length).split(sep).filter(Boolean);
|
|
76
|
+
assertDirectory(path, lstatSync(path), false, false);
|
|
77
|
+
for (const [index, part] of components.entries()) {
|
|
78
|
+
path = join(path, part);
|
|
79
|
+
const leaf = index === components.length - 1;
|
|
80
|
+
let stat = statIfPresent(path);
|
|
81
|
+
if (stat?.isSymbolicLink()) {
|
|
82
|
+
if (process.platform === "win32" || leaf || afterShared || stat.uid !== 0) invalid(path, "contains a link or non-directory");
|
|
83
|
+
const target = realpathSync(path);
|
|
84
|
+
assertTrustedSystemTarget(target);
|
|
85
|
+
path = target;
|
|
86
|
+
stat = lstatSync(path);
|
|
87
|
+
}
|
|
88
|
+
if (!stat) {
|
|
89
|
+
try { mkdirSync(path, { mode: 0o700 }); }
|
|
90
|
+
catch (error) { if ((error as NodeJS.ErrnoException).code !== "EEXIST") throw error; }
|
|
91
|
+
stat = lstatSync(path);
|
|
92
|
+
}
|
|
93
|
+
assertDirectory(path, stat, leaf, afterShared);
|
|
94
|
+
if (leaf) restrictPrivateDirectory(path, stat);
|
|
95
|
+
if (process.platform !== "win32" && stat.uid === 0 && (stat.mode & 0o022) !== 0) afterShared = true;
|
|
96
|
+
}
|
|
97
|
+
return path;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Called after exact admission and again immediately before/after the public pathname-based SDK open. */
|
|
101
|
+
export function guardCursorCustomStorePath(customRoot: string, stateRoot: string): { verify(): void } {
|
|
102
|
+
if (prepareCursorCustomStoreRoot(customRoot) !== customRoot) invalid(customRoot, "changed canonical identity");
|
|
103
|
+
const directories = [{ path: customRoot, stat: lstatSync(customRoot) }];
|
|
104
|
+
let path = customRoot;
|
|
105
|
+
for (const part of stateRoot.slice(customRoot.length + 1).split(sep)) {
|
|
106
|
+
path = join(path, part);
|
|
107
|
+
if (!statIfPresent(path)) {
|
|
108
|
+
try { mkdirSync(path, { mode: 0o700 }); }
|
|
109
|
+
catch (error) { if ((error as NodeJS.ErrnoException).code !== "EEXIST") throw error; }
|
|
110
|
+
}
|
|
111
|
+
const stat = lstatSync(path);
|
|
112
|
+
assertDirectory(path, stat, true, true);
|
|
113
|
+
restrictPrivateDirectory(path, stat);
|
|
114
|
+
directories.push({ path, stat });
|
|
115
|
+
}
|
|
116
|
+
const leaves = ["index.db", "index.db-wal", "index.db-shm", "index.db-journal"];
|
|
117
|
+
const originalLeaves = new Map<string, Stats>();
|
|
118
|
+
const checkLeaves = () => {
|
|
119
|
+
for (const name of leaves) {
|
|
120
|
+
const file = join(stateRoot, name);
|
|
121
|
+
const stat = statIfPresent(file);
|
|
122
|
+
if (!stat) {
|
|
123
|
+
if (name === "index.db" && originalLeaves.has(file)) invalid(file, "disappeared SQLite file");
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (!stat.isFile() || stat.nlink !== 1) invalid(file, "contains a linked or nonregular SQLite file");
|
|
127
|
+
if (process.platform !== "win32" && (stat.uid !== process.getuid!() || (stat.mode & 0o022))) {
|
|
128
|
+
invalid(file, "contains an unowned or shared SQLite file");
|
|
129
|
+
}
|
|
130
|
+
const before = originalLeaves.get(file);
|
|
131
|
+
if (before && !sameFileIdentity(before, stat)) invalid(file, "changed SQLite file identity");
|
|
132
|
+
const fd = openExistingRegularFileNoFollow(file, constants.O_RDWR);
|
|
133
|
+
closeSync(fd);
|
|
134
|
+
originalLeaves.set(file, stat);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
checkLeaves();
|
|
138
|
+
// ponytail: the public SDK uses pathname/lazy checkpoint opens. This guards
|
|
139
|
+
// current-user private contents, not hostile same-user/admin races. Windows
|
|
140
|
+
// rejects Node-visible links/junctions but has no ACL hardening/O_NOFOLLOW
|
|
141
|
+
// equivalent here; use an ACL-protected root. Upgrade with public native APIs.
|
|
142
|
+
return { verify() {
|
|
143
|
+
if (prepareCursorCustomStoreRoot(customRoot) !== customRoot) invalid(customRoot, "changed canonical identity");
|
|
144
|
+
for (const { path, stat } of directories) {
|
|
145
|
+
const after = lstatSync(path);
|
|
146
|
+
assertDirectory(path, after, true, true);
|
|
147
|
+
if (!sameFileIdentity(stat, after)) invalid(path, "changed directory identity");
|
|
148
|
+
}
|
|
149
|
+
checkLeaves();
|
|
150
|
+
} };
|
|
151
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AgentOptions } from "@cursor/sdk";
|
|
2
|
+
import type { CursorCustomSubagentsConfig } from "./cursor-config.js";
|
|
3
|
+
import { buildCursorModelSelection, getCursorModelMetadata } from "./model-discovery.js";
|
|
4
|
+
|
|
5
|
+
export function buildCursorCustomSubagentDefinitions(config: CursorCustomSubagentsConfig | undefined): AgentOptions["agents"] {
|
|
6
|
+
if (!config || !Object.keys(config).length) return undefined;
|
|
7
|
+
return Object.fromEntries(Object.entries(config).map(([name, entry]) => [name, {
|
|
8
|
+
description: entry.description,
|
|
9
|
+
prompt: entry.prompt,
|
|
10
|
+
...(entry.model === undefined ? {} : {
|
|
11
|
+
model: entry.model === "inherit" ? "inherit" : buildCursorModelSelection(
|
|
12
|
+
entry.model,
|
|
13
|
+
entry.thinking ?? "off",
|
|
14
|
+
getCursorModelMetadata(entry.model)?.fastOverride ?? entry.fast,
|
|
15
|
+
),
|
|
16
|
+
}),
|
|
17
|
+
}]));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// ponytail: SDK 1.0.36 LOCAL conversion keeps only model ID/inherit; it drops params.
|
|
21
|
+
// Upgrade this claim only after the installed public converter preserves them.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ModelListItem } from "@cursor/sdk";
|
|
2
2
|
|
|
3
|
-
// Generated with @cursor/sdk@1.0.
|
|
3
|
+
// Generated with @cursor/sdk@1.0.36 from 45 Cursor models.
|
|
4
4
|
// Refresh with: npm run refresh:cursor-snapshots -- --write
|
|
5
5
|
// Do not add secrets; this file stores public model metadata only.
|
|
6
6
|
export const FALLBACK_MODEL_ITEMS = [
|
|
@@ -8,15 +8,19 @@ export type CursorFallbackWarningExtensionApi = CursorModelLifecycleExtensionApi
|
|
|
8
8
|
|
|
9
9
|
export function registerCursorFallbackIssueWarning(
|
|
10
10
|
pi: CursorFallbackWarningExtensionApi,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
): (nextIssue: CursorModelFallbackIssue | undefined) => void {
|
|
12
|
+
let issue: CursorModelFallbackIssue | undefined;
|
|
13
13
|
const warnedSessionScopeKeys = new Set<string>();
|
|
14
14
|
|
|
15
15
|
registerCursorModelLifecycle(pi, (ctx: ExtensionContext) => {
|
|
16
|
-
if (!isCursorModel(ctx.model) || !ctx.hasUI) return;
|
|
16
|
+
if (!issue || !isCursorModel(ctx.model) || !ctx.hasUI) return;
|
|
17
17
|
const scopeKey = cursorSessionScopeKeyForManager(ctx.sessionManager);
|
|
18
18
|
if (warnedSessionScopeKeys.has(scopeKey)) return;
|
|
19
19
|
warnedSessionScopeKeys.add(scopeKey);
|
|
20
20
|
ctx.ui.notify(issue.message, "warning");
|
|
21
21
|
});
|
|
22
|
+
return (nextIssue) => {
|
|
23
|
+
if (nextIssue?.reason !== issue?.reason || nextIssue?.message !== issue?.message) warnedSessionScopeKeys.clear();
|
|
24
|
+
issue = nextIssue;
|
|
25
|
+
};
|
|
22
26
|
}
|
|
@@ -153,6 +153,7 @@ interface CursorLiveRunPrivateState {
|
|
|
153
153
|
waiters: Set<ProgressWaiter>;
|
|
154
154
|
idleDisposeTimer?: ReturnType<typeof setTimeout>;
|
|
155
155
|
idleDisposeRequested: boolean;
|
|
156
|
+
pendingCallUnsubscribers?: Array<() => void>;
|
|
156
157
|
leased: boolean;
|
|
157
158
|
leaseQueue: LeaseWaiter[];
|
|
158
159
|
releasing?: Promise<void>;
|
|
@@ -313,6 +314,12 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
313
314
|
leased: false,
|
|
314
315
|
leaseQueue: [],
|
|
315
316
|
});
|
|
317
|
+
const state = getPrivateState(run);
|
|
318
|
+
state.pendingCallUnsubscribers = [...new Set([run.bridgeRun, run.sessionBridgeRun])].flatMap((bridge) =>
|
|
319
|
+
bridge ? [bridge.onPendingToolCallsChanged(() => {
|
|
320
|
+
if (state.idleDisposeRequested || state.idleDisposeTimer) coordinator.requestIdleDispose(run);
|
|
321
|
+
})] : [],
|
|
322
|
+
);
|
|
316
323
|
pendingRuns.set(run.id, run);
|
|
317
324
|
pendingRunIdsByScopeKey.set(sessionAgentScopeKey, run.id);
|
|
318
325
|
return run;
|
|
@@ -492,9 +499,15 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
492
499
|
const state = getPrivateState(run);
|
|
493
500
|
clearIdleDisposeTimer(run);
|
|
494
501
|
state.idleDisposeRequested = true;
|
|
495
|
-
if (state.leased || state.leaseQueue.length > 0
|
|
496
|
-
|
|
502
|
+
if (state.leased || state.leaseQueue.length > 0 ||
|
|
503
|
+
[run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls())) return;
|
|
497
504
|
state.idleDisposeTimer = setTimeout(() => {
|
|
505
|
+
state.idleDisposeTimer = undefined;
|
|
506
|
+
if (state.leased || state.leaseQueue.length > 0 ||
|
|
507
|
+
[run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls())) {
|
|
508
|
+
coordinator.requestIdleDispose(run);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
498
511
|
void coordinator.release(run).catch(() => {
|
|
499
512
|
// Idle dispose must not leave release failures as unhandled rejections.
|
|
500
513
|
});
|
|
@@ -509,6 +522,12 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
509
522
|
if (run.disposed) return;
|
|
510
523
|
const abandoned = !isSuccessfulCursorLiveRun(run);
|
|
511
524
|
run.disposed = true;
|
|
525
|
+
for (const unsubscribe of state.pendingCallUnsubscribers ?? []) {
|
|
526
|
+
try { unsubscribe(); } catch {
|
|
527
|
+
// Cleanup continues even if an observer cannot detach.
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
state.pendingCallUnsubscribers = [];
|
|
512
531
|
unregister(run);
|
|
513
532
|
clearIdleDisposeTimer(run);
|
|
514
533
|
state.idleDisposeRequested = false;
|
|
@@ -91,7 +91,9 @@ export function isCursorSdkMcpToolTimeoutStack(stack: string | undefined): boole
|
|
|
91
91
|
|
|
92
92
|
export function isCursorSdkMcpConnectTimeoutStack(stack: string | undefined): boolean {
|
|
93
93
|
if (!stack || !isCursorSdkMcpProtocolTimeoutStack(stack)) return false;
|
|
94
|
-
|
|
94
|
+
// SDK 1.0.36 minifies the Client class name; the protocol method and SDK
|
|
95
|
+
// frame, not that constructor's spelling, establish this timeout purpose.
|
|
96
|
+
return /^\s*at (?:[\w$]+\.)?(?:connect|listTools|getTools)\s*\(.*(?:node_modules[/\\]@cursor[/\\]sdk|@cursor\/sdk\/dist)/m.test(stack);
|
|
95
97
|
}
|
|
96
98
|
|
|
97
99
|
function isCursorSdkDefaultMcpTimeout(delay: SetTimeoutDelay): boolean {
|
|
@@ -67,6 +67,7 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
67
67
|
private readonly knownMcpToolNames: ReadonlySet<string>;
|
|
68
68
|
private readonly knownCursorMcpCallIds = new Set<string>();
|
|
69
69
|
private readonly queuedRequests: CursorPiBridgeToolRequest[] = [];
|
|
70
|
+
private readonly pendingToolCallListeners = new Set<() => void>();
|
|
70
71
|
private readonly pendingByPiToolCallId = new Map<string, PendingBridgeCall>();
|
|
71
72
|
private readonly pendingByBridgeCallId = new Map<string, PendingBridgeCall>();
|
|
72
73
|
private readonly pendingByCursorMcpCallId = new Map<string, PendingBridgeCall>();
|
|
@@ -190,6 +191,23 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
190
191
|
return this.pendingByPiToolCallId.has(piToolCallId);
|
|
191
192
|
}
|
|
192
193
|
|
|
194
|
+
hasPendingToolCalls(): boolean {
|
|
195
|
+
return this.pendingCount() > 0;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
onPendingToolCallsChanged(listener: () => void): () => void {
|
|
199
|
+
this.pendingToolCallListeners.add(listener);
|
|
200
|
+
return () => { this.pendingToolCallListeners.delete(listener); };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private notifyPendingToolCallsChanged(): void {
|
|
204
|
+
for (const listener of this.pendingToolCallListeners) {
|
|
205
|
+
try { listener(); } catch {
|
|
206
|
+
// Observers must not prevent call registration or protocol settlement.
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
193
211
|
cancelPendingPiToolCallId(piToolCallId: string, reason: string): boolean {
|
|
194
212
|
const pending = this.pendingByPiToolCallId.get(piToolCallId);
|
|
195
213
|
if (!pending) return false;
|
|
@@ -234,6 +252,7 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
234
252
|
if (this.disposed) return;
|
|
235
253
|
this.disposed = true;
|
|
236
254
|
this.cancel("Cursor pi tool bridge run disposed");
|
|
255
|
+
this.pendingToolCallListeners.clear();
|
|
237
256
|
await waitForProtocolFlush();
|
|
238
257
|
await Promise.allSettled([
|
|
239
258
|
this.mcpTransport?.close(),
|
|
@@ -315,6 +334,7 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
315
334
|
this.pendingByBridgeCallId.set(request.bridgeCallId, pending);
|
|
316
335
|
this.pendingByCursorMcpCallId.set(cursorMcpCallId, pending);
|
|
317
336
|
this.knownCursorMcpCallIds.add(cursorMcpCallId);
|
|
337
|
+
this.notifyPendingToolCallsChanged();
|
|
318
338
|
pending.timeout = setTimeout(() => {
|
|
319
339
|
const reason = `Cursor pi bridge CallTool timed out after ${this.callTimeoutMs} ms`;
|
|
320
340
|
this.rejectAndAbortPending(pending, new Error(reason));
|
|
@@ -438,5 +458,6 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
438
458
|
if (pending.request.cursorMcpCallId) this.pendingByCursorMcpCallId.delete(pending.request.cursorMcpCallId);
|
|
439
459
|
const queuedIndex = this.queuedRequests.findIndex((request) => request.bridgeCallId === pending.request.bridgeCallId);
|
|
440
460
|
if (queuedIndex >= 0) this.queuedRequests.splice(queuedIndex, 1);
|
|
461
|
+
this.notifyPendingToolCallsChanged();
|
|
441
462
|
}
|
|
442
463
|
}
|
|
@@ -7,7 +7,7 @@ import type {
|
|
|
7
7
|
CursorPiToolBridgeSnapshotApi,
|
|
8
8
|
} from "./cursor-pi-tool-bridge-types.js";
|
|
9
9
|
import { asRecord } from "./cursor-record-utils.js";
|
|
10
|
-
import
|
|
10
|
+
import { CursorPiToolBridgeRunImpl } from "./cursor-pi-tool-bridge-run.js";
|
|
11
11
|
import {
|
|
12
12
|
buildCursorPiToolBridgeSnapshot,
|
|
13
13
|
buildCursorPiToolBridgeSurfaceSignature,
|
|
@@ -55,7 +55,6 @@ export class CursorPiToolBridgeRegistry implements CursorPiToolBridge {
|
|
|
55
55
|
exposeOverlappingBuiltins: resolveCursorPiToolBridgeBuiltinsEnabled(this.env),
|
|
56
56
|
})
|
|
57
57
|
: createEmptySnapshot();
|
|
58
|
-
const { CursorPiToolBridgeRunImpl } = await import("./cursor-pi-tool-bridge-run.js");
|
|
59
58
|
const run = new CursorPiToolBridgeRunImpl(this, this.env, snapshot, bridgeEnabled && snapshot.tools.length > 0, options);
|
|
60
59
|
this.runs.add(run);
|
|
61
60
|
await run.start();
|
|
@@ -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;
|