pi-cursor-sdk 0.4.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/README.md +169 -37
- package/dist/context-window-cache.js +0 -6
- package/dist/context.js +61 -34
- package/dist/cursor-api-key.js +34 -19
- package/dist/cursor-cloud-lifecycle.js +122 -98
- package/dist/cursor-cloud-options.js +1 -0
- package/dist/cursor-config.js +59 -0
- package/dist/cursor-custom-store-path.js +177 -0
- package/dist/cursor-custom-subagent-definitions.js +14 -0
- package/dist/cursor-durable-fs.js +97 -3
- package/dist/cursor-fallback-models.generated.js +288 -1
- package/dist/cursor-fallback-warning.js +10 -4
- package/dist/cursor-http1.js +8 -8
- package/dist/cursor-live-run-coordinator.js +31 -15
- package/dist/cursor-mcp-timeout-override.js +3 -1
- package/dist/cursor-native-replay-routing.js +1 -1
- package/dist/cursor-native-tool-display-registration.js +46 -22
- package/dist/cursor-native-tool-display-state.js +57 -22
- package/dist/cursor-native-tool-display-tools.js +5 -6
- package/dist/cursor-pi-tool-bridge-constants.js +23 -2
- package/dist/cursor-pi-tool-bridge-run.js +28 -3
- package/dist/cursor-pi-tool-bridge-server.js +1 -1
- package/dist/cursor-pi-tool-bridge-snapshot.js +1 -1
- package/dist/cursor-pi-tool-bridge.js +31 -9
- package/dist/cursor-provider-binding.js +118 -0
- package/dist/cursor-provider-errors.js +61 -33
- package/dist/cursor-provider-lazy.js +23 -11
- package/dist/cursor-provider-live-run-drain.js +25 -16
- package/dist/cursor-provider-run-finalizer.js +21 -9
- package/dist/cursor-provider-turn-coordinator.js +1 -0
- package/dist/cursor-provider-turn-display-router.js +4 -0
- package/dist/cursor-provider-turn-emit.js +1 -0
- package/dist/cursor-provider-turn-finalize.js +29 -20
- package/dist/cursor-provider-turn-prepare.js +49 -20
- package/dist/cursor-provider-turn-runner.js +37 -11
- package/dist/cursor-provider-turn-send.js +22 -9
- package/dist/cursor-provider-turn-summary.js +89 -0
- package/dist/cursor-provider-turn-tool-ledger.js +13 -7
- package/dist/cursor-provider.js +10 -3
- package/dist/cursor-question-tool.js +5 -5
- package/dist/cursor-request-provenance.js +53 -0
- package/dist/cursor-ripgrep-path.js +14 -3
- package/dist/cursor-runtime-state.js +50 -43
- package/dist/cursor-sdk-billed-usage.js +54 -75
- package/dist/cursor-sdk-event-debug-session.js +5 -6
- package/dist/cursor-sdk-event-debug.js +9 -6
- package/dist/cursor-sdk-output-filter.js +1 -1
- package/dist/cursor-sdk-process-error-guard.js +9 -10
- package/dist/cursor-sdk-runtime.js +13 -1
- package/dist/cursor-sdk-vendor-env.js +20 -0
- package/dist/cursor-session-agent-cleanup.js +31 -28
- package/dist/cursor-session-agent-lifecycle.js +18 -9
- package/dist/cursor-session-agent-lineage.js +28 -12
- package/dist/cursor-session-agent-resume.js +51 -35
- package/dist/cursor-session-agent.js +47 -25
- package/dist/cursor-session-compaction-prep.js +2 -7
- package/dist/cursor-session-scope.js +71 -39
- package/dist/cursor-session-send-policy.js +2 -2
- package/dist/cursor-session-settings.js +61 -0
- package/dist/cursor-session-store.js +235 -45
- package/dist/cursor-skill-tool.js +32 -49
- package/dist/cursor-state.js +78 -65
- package/dist/cursor-tool-manifest.js +1 -1
- package/dist/cursor-usage-accounting.js +13 -70
- package/dist/cursor-usage-command.js +89 -0
- package/dist/cursor-usage-ledger.js +512 -0
- package/dist/index.js +29 -35
- package/dist/model-discovery.js +62 -37
- package/dist/model-list-cache.js +12 -1
- package/docs/cursor-dogfood-checklist.md +3 -3
- package/docs/cursor-live-smoke-checklist.md +15 -15
- package/docs/cursor-model-ux-spec.md +124 -39
- package/docs/cursor-native-tool-replay.md +18 -8
- package/docs/cursor-native-tool-visual-audit.md +8 -8
- package/docs/cursor-testing-lessons.md +87 -25
- package/docs/cursor-tool-surfaces.md +4 -4
- package/docs/platform-smoke-implementation.md +10 -6
- package/docs/platform-smoke.md +35 -46
- package/node_modules/@hono/node-server/README.md +21 -10
- package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
- package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
- package/node_modules/@hono/node-server/dist/index.cjs +41 -19
- package/node_modules/@hono/node-server/dist/index.mjs +42 -20
- package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
- package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
- package/node_modules/@hono/node-server/package.json +3 -2
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/package.json +2 -2
- package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
- package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
- package/node_modules/@modelcontextprotocol/server/README.md +1 -7
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
- package/node_modules/@modelcontextprotocol/server/package.json +4 -4
- package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
- package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
- package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
- package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
- package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
- package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
- package/node_modules/hono/dist/adapter/bun/index.js +3 -13
- package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
- package/node_modules/hono/dist/adapter/bun/server.js +11 -5
- package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
- package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
- package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
- package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
- package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
- package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
- package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
- package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
- package/node_modules/hono/dist/adapter/deno/index.js +3 -10
- package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
- package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
- package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
- package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
- package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
- package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
- package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
- package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
- package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
- package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
- package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
- package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
- package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
- package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
- package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
- package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
- package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
- package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
- package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
- package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
- package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
- package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
- package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
- package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
- package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
- package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
- package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
- package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
- package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
- package/node_modules/hono/dist/cjs/client/client.js +139 -212
- package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
- package/node_modules/hono/dist/cjs/client/index.js +7 -32
- package/node_modules/hono/dist/cjs/client/types.js +0 -15
- package/node_modules/hono/dist/cjs/client/utils.js +54 -92
- package/node_modules/hono/dist/cjs/compose.js +49 -66
- package/node_modules/hono/dist/cjs/context.js +379 -450
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
- package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
- package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
- package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
- package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
- package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
- package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
- package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
- package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
- package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
- package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
- package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
- package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
- package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
- package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
- package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
- package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
- package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
- package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
- package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
- package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
- package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
- package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
- package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
- package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
- package/node_modules/hono/dist/cjs/hono-base.js +347 -403
- package/node_modules/hono/dist/cjs/hono.js +28 -42
- package/node_modules/hono/dist/cjs/http-exception.js +55 -56
- package/node_modules/hono/dist/cjs/index.js +22 -30
- package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
- package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
- package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
- package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
- package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
- package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
- package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
- package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
- package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
- package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
- package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
- package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
- package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
- package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
- package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
- package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
- package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
- package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
- package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
- package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
- package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
- package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
- package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
- package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
- package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
- package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
- package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
- package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
- package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
- package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
- package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
- package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
- package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
- package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
- package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
- package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
- package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
- package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
- package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
- package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
- package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
- package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
- package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
- package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
- package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
- package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
- package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
- package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
- package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
- package/node_modules/hono/dist/cjs/request/constants.js +5 -27
- package/node_modules/hono/dist/cjs/request.js +334 -346
- package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
- package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
- package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
- package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
- package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
- package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
- package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
- package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
- package/node_modules/hono/dist/cjs/router/utils.js +5 -27
- package/node_modules/hono/dist/cjs/router.js +37 -37
- package/node_modules/hono/dist/cjs/types.js +5 -28
- package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
- package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
- package/node_modules/hono/dist/cjs/utils/body.js +84 -110
- package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
- package/node_modules/hono/dist/cjs/utils/color.js +35 -44
- package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
- package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
- package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
- package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
- package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
- package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
- package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
- package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
- package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
- package/node_modules/hono/dist/cjs/utils/html.js +96 -137
- package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
- package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
- package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
- package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
- package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
- package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
- package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
- package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
- package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
- package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
- package/node_modules/hono/dist/cjs/utils/types.js +0 -15
- package/node_modules/hono/dist/cjs/utils/url.js +185 -234
- package/node_modules/hono/dist/cjs/validator/index.js +3 -27
- package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
- package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
- package/node_modules/hono/dist/client/client.js +138 -197
- package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
- package/node_modules/hono/dist/client/index.js +3 -7
- package/node_modules/hono/dist/client/types.js +1 -0
- package/node_modules/hono/dist/client/utils.js +51 -68
- package/node_modules/hono/dist/compose.js +49 -45
- package/node_modules/hono/dist/context.js +376 -426
- package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
- package/node_modules/hono/dist/helper/accepts/index.js +1 -4
- package/node_modules/hono/dist/helper/adapter/index.js +33 -52
- package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
- package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
- package/node_modules/hono/dist/helper/cookie/index.js +74 -94
- package/node_modules/hono/dist/helper/css/common.js +167 -225
- package/node_modules/hono/dist/helper/css/index.js +132 -137
- package/node_modules/hono/dist/helper/dev/index.js +44 -49
- package/node_modules/hono/dist/helper/factory/index.js +27 -27
- package/node_modules/hono/dist/helper/html/index.js +30 -39
- package/node_modules/hono/dist/helper/proxy/index.js +116 -88
- package/node_modules/hono/dist/helper/route/index.js +121 -43
- package/node_modules/hono/dist/helper/ssg/index.js +3 -18
- package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
- package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
- package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
- package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
- package/node_modules/hono/dist/helper/streaming/index.js +2 -8
- package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
- package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
- package/node_modules/hono/dist/helper/streaming/text.js +9 -10
- package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
- package/node_modules/hono/dist/helper/testing/index.js +16 -10
- package/node_modules/hono/dist/helper/websocket/index.js +49 -53
- package/node_modules/hono/dist/hono-base.js +344 -379
- package/node_modules/hono/dist/hono.js +27 -20
- package/node_modules/hono/dist/http-exception.js +53 -33
- package/node_modules/hono/dist/index.js +19 -6
- package/node_modules/hono/dist/jsx/base.js +231 -340
- package/node_modules/hono/dist/jsx/children.js +16 -20
- package/node_modules/hono/dist/jsx/components.js +118 -170
- package/node_modules/hono/dist/jsx/constants.js +9 -15
- package/node_modules/hono/dist/jsx/context.js +153 -150
- package/node_modules/hono/dist/jsx/dom/client.js +45 -48
- package/node_modules/hono/dist/jsx/dom/components.js +21 -29
- package/node_modules/hono/dist/jsx/dom/context.js +37 -44
- package/node_modules/hono/dist/jsx/dom/css.js +142 -147
- package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
- package/node_modules/hono/dist/jsx/dom/index.js +71 -134
- package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
- package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
- package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
- package/node_modules/hono/dist/jsx/dom/render.js +492 -631
- package/node_modules/hono/dist/jsx/dom/server.js +32 -32
- package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
- package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
- package/node_modules/hono/dist/jsx/index.js +45 -98
- package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
- package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
- package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
- package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
- package/node_modules/hono/dist/jsx/streaming.js +120 -142
- package/node_modules/hono/dist/jsx/types.js +1 -0
- package/node_modules/hono/dist/jsx/utils.js +105 -168
- package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
- package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
- package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
- package/node_modules/hono/dist/middleware/cache/index.js +165 -190
- package/node_modules/hono/dist/middleware/combine/index.js +134 -73
- package/node_modules/hono/dist/middleware/compress/index.js +75 -69
- package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
- package/node_modules/hono/dist/middleware/cors/index.js +107 -86
- package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
- package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
- package/node_modules/hono/dist/middleware/etag/index.js +71 -70
- package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
- package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
- package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
- package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
- package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
- package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
- package/node_modules/hono/dist/middleware/language/index.js +2 -15
- package/node_modules/hono/dist/middleware/language/language.js +180 -157
- package/node_modules/hono/dist/middleware/logger/index.js +43 -37
- package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
- package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
- package/node_modules/hono/dist/middleware/mount/index.js +70 -0
- package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
- package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
- package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
- package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
- package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
- package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
- package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
- package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
- package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
- package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
- package/node_modules/hono/dist/middleware/timing/index.js +2 -9
- package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
- package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
- package/node_modules/hono/dist/preset/quick.js +17 -15
- package/node_modules/hono/dist/preset/tiny.js +14 -11
- package/node_modules/hono/dist/request/constants.js +4 -5
- package/node_modules/hono/dist/request.js +328 -319
- package/node_modules/hono/dist/router/linear-router/index.js +1 -4
- package/node_modules/hono/dist/router/linear-router/router.js +93 -120
- package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
- package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
- package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
- package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
- package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
- package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
- package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
- package/node_modules/hono/dist/router/smart-router/index.js +1 -4
- package/node_modules/hono/dist/router/smart-router/router.js +46 -55
- package/node_modules/hono/dist/router/trie-router/index.js +1 -4
- package/node_modules/hono/dist/router/trie-router/node.js +131 -162
- package/node_modules/hono/dist/router/trie-router/router.js +11 -14
- package/node_modules/hono/dist/router/utils.js +4 -5
- package/node_modules/hono/dist/router.js +35 -14
- package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
- package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
- package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
- package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
- package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
- package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
- package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
- package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
- package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
- package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
- package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
- package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
- package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
- package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
- package/node_modules/hono/dist/types/client/client.d.ts +5 -3
- package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
- package/node_modules/hono/dist/types/client/index.d.ts +5 -7
- package/node_modules/hono/dist/types/client/types.d.ts +134 -159
- package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
- package/node_modules/hono/dist/types/compose.d.ts +4 -2
- package/node_modules/hono/dist/types/context.d.ts +335 -335
- package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
- package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
- package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
- package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
- package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
- package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
- package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
- package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
- package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
- package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
- package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
- package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
- package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
- package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
- package/node_modules/hono/dist/types/hono.d.ts +11 -10
- package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
- package/node_modules/hono/dist/types/index.d.ts +6 -37
- package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
- package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
- package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
- package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
- package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
- package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
- package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
- package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
- package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
- package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
- package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
- package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
- package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
- package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
- package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
- package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
- package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
- package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
- package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
- package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
- package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
- package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
- package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
- package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
- package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
- package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
- package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
- package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
- package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
- package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
- package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
- package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
- package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
- package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
- package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
- package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
- package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
- package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
- package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
- package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
- package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
- package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
- package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
- package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
- package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
- package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/request.d.ts +288 -286
- package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
- package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
- package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
- package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
- package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
- package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/router.d.ts +23 -22
- package/node_modules/hono/dist/types/types.d.ts +146 -505
- package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
- package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
- package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
- package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
- package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
- package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
- package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
- package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
- package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
- package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
- package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
- package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
- package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
- package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
- package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
- package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
- package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
- package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
- package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
- package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
- package/node_modules/hono/dist/types.js +4 -6
- package/node_modules/hono/dist/utils/accept.js +185 -212
- package/node_modules/hono/dist/utils/basic-auth.js +18 -21
- package/node_modules/hono/dist/utils/body.js +87 -92
- package/node_modules/hono/dist/utils/buffer.js +44 -71
- package/node_modules/hono/dist/utils/color.js +33 -21
- package/node_modules/hono/dist/utils/compress.js +11 -5
- package/node_modules/hono/dist/utils/concurrent.js +29 -38
- package/node_modules/hono/dist/utils/constants.js +7 -5
- package/node_modules/hono/dist/utils/cookie.js +114 -163
- package/node_modules/hono/dist/utils/crypto.js +30 -40
- package/node_modules/hono/dist/utils/encode.js +30 -26
- package/node_modules/hono/dist/utils/filepath.js +23 -33
- package/node_modules/hono/dist/utils/handler.js +10 -11
- package/node_modules/hono/dist/utils/headers.js +1 -0
- package/node_modules/hono/dist/utils/html.js +97 -117
- package/node_modules/hono/dist/utils/http-status.js +1 -0
- package/node_modules/hono/dist/utils/ipaddr.js +227 -279
- package/node_modules/hono/dist/utils/jwt/index.js +12 -4
- package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
- package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
- package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
- package/node_modules/hono/dist/utils/jwt/types.js +79 -95
- package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
- package/node_modules/hono/dist/utils/mime.js +74 -79
- package/node_modules/hono/dist/utils/stream.js +86 -88
- package/node_modules/hono/dist/utils/types.js +1 -0
- package/node_modules/hono/dist/utils/url.js +187 -215
- package/node_modules/hono/dist/validator/index.js +1 -4
- package/node_modules/hono/dist/validator/utils.js +1 -0
- package/node_modules/hono/dist/validator/validator.js +61 -83
- package/node_modules/hono/package.json +35 -27
- package/package.json +16 -14
- package/scripts/cloud-runtime-smoke.mjs +4 -2
- package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
- package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
- package/scripts/local-resume-smoke.mjs +1 -1
- package/scripts/platform-smoke/artifacts.mjs +7 -1
- package/scripts/platform-smoke/card-detect.mjs +2 -8
- package/scripts/platform-smoke/targets.mjs +8 -15
- package/scripts/platform-smoke/visual-evidence.mjs +7 -2
- package/scripts/tmux-live-smoke.sh +57 -90
- package/shared/cursor-sdk-output-filter.d.mts +3 -0
- package/shared/cursor-sdk-output-filter.mjs +117 -44
- package/src/context-window-cache.ts +0 -6
- package/src/context.ts +65 -33
- package/src/cursor-api-key.ts +37 -17
- package/src/cursor-cloud-lifecycle.ts +124 -98
- package/src/cursor-cloud-options.ts +2 -0
- package/src/cursor-config.ts +76 -0
- package/src/cursor-custom-store-path.ts +151 -0
- package/src/cursor-custom-subagent-definitions.ts +21 -0
- package/src/cursor-durable-fs.ts +65 -3
- package/src/cursor-fallback-models.generated.ts +288 -1
- package/src/cursor-fallback-warning.ts +9 -5
- package/src/cursor-http1.ts +8 -8
- package/src/cursor-live-run-coordinator.ts +33 -15
- package/src/cursor-mcp-timeout-override.ts +3 -1
- package/src/cursor-native-replay-routing.ts +2 -1
- package/src/cursor-native-tool-display-registration.ts +48 -24
- package/src/cursor-native-tool-display-state.ts +65 -21
- package/src/cursor-native-tool-display-tools.ts +7 -4
- package/src/cursor-pi-tool-bridge-constants.ts +27 -2
- package/src/cursor-pi-tool-bridge-run.ts +32 -3
- package/src/cursor-pi-tool-bridge-server.ts +1 -2
- package/src/cursor-pi-tool-bridge-snapshot.ts +1 -1
- package/src/cursor-pi-tool-bridge-types.ts +3 -0
- package/src/cursor-pi-tool-bridge.ts +26 -9
- package/src/cursor-provider-binding.ts +121 -0
- package/src/cursor-provider-errors.ts +59 -35
- package/src/cursor-provider-lazy.ts +21 -15
- package/src/cursor-provider-live-run-drain.ts +29 -17
- package/src/cursor-provider-run-finalizer.ts +26 -16
- package/src/cursor-provider-turn-coordinator.ts +2 -0
- package/src/cursor-provider-turn-display-router.ts +5 -0
- package/src/cursor-provider-turn-emit.ts +3 -1
- package/src/cursor-provider-turn-finalize.ts +38 -23
- package/src/cursor-provider-turn-prepare.ts +51 -27
- package/src/cursor-provider-turn-runner.ts +40 -13
- package/src/cursor-provider-turn-send.ts +23 -15
- package/src/cursor-provider-turn-summary.ts +94 -0
- package/src/cursor-provider-turn-tool-ledger.ts +12 -7
- package/src/cursor-provider-turn-types.ts +37 -4
- package/src/cursor-provider.ts +28 -4
- package/src/cursor-question-tool.ts +5 -5
- package/src/cursor-request-provenance.ts +79 -0
- package/src/cursor-ripgrep-path.ts +15 -5
- package/src/cursor-runtime-state.ts +53 -48
- package/src/cursor-sdk-billed-usage.ts +54 -102
- package/src/cursor-sdk-event-debug-session.ts +5 -5
- package/src/cursor-sdk-event-debug.ts +10 -6
- package/src/cursor-sdk-output-filter.ts +2 -0
- package/src/cursor-sdk-process-error-guard.ts +8 -9
- package/src/cursor-sdk-runtime.ts +15 -2
- package/src/cursor-sdk-vendor-env.ts +22 -0
- package/src/cursor-session-agent-cleanup.ts +30 -29
- package/src/cursor-session-agent-lifecycle.ts +14 -9
- package/src/cursor-session-agent-lineage.ts +26 -12
- package/src/cursor-session-agent-resume.ts +49 -36
- package/src/cursor-session-agent.ts +57 -27
- package/src/cursor-session-compaction-prep.ts +2 -7
- package/src/cursor-session-scope.ts +87 -39
- package/src/cursor-session-send-policy.ts +2 -2
- package/src/cursor-session-settings.ts +72 -0
- package/src/cursor-session-store.ts +259 -53
- package/src/cursor-skill-tool.ts +37 -61
- package/src/cursor-state.ts +81 -69
- package/src/cursor-tool-manifest.ts +1 -1
- package/src/cursor-usage-accounting.ts +17 -82
- package/src/cursor-usage-command.ts +76 -0
- package/src/cursor-usage-ledger.ts +500 -0
- package/src/index.ts +30 -39
- package/src/model-discovery.ts +76 -45
- package/src/model-list-cache.ts +11 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
|
@@ -153,6 +153,7 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
153
153
|
bridgeRun: params.bridgeRun,
|
|
154
154
|
sessionBridgeRun: params.sessionBridgeRun,
|
|
155
155
|
sessionAgentScopeKey,
|
|
156
|
+
nativeDisplay: params.nativeDisplay,
|
|
156
157
|
accounting: createCursorLiveRunAccountingState(params.promptInputTokens),
|
|
157
158
|
pendingEvents: [],
|
|
158
159
|
textDeltas: params.textDeltas ?? [],
|
|
@@ -170,6 +171,11 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
170
171
|
leased: false,
|
|
171
172
|
leaseQueue: [],
|
|
172
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
|
+
})] : []);
|
|
173
179
|
pendingRuns.set(run.id, run);
|
|
174
180
|
pendingRunIdsByScopeKey.set(sessionAgentScopeKey, run.id);
|
|
175
181
|
return run;
|
|
@@ -270,7 +276,10 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
270
276
|
run.accounting = taken.state;
|
|
271
277
|
return taken.sdkTurnUsage;
|
|
272
278
|
},
|
|
273
|
-
getPendingFromContext(context, getReplayId) {
|
|
279
|
+
getPendingFromContext(context, getReplayId, scopeKey) {
|
|
280
|
+
const run = getUndisposed(pendingRunIdsByScopeKey.get(scopeKey));
|
|
281
|
+
if (!run)
|
|
282
|
+
return undefined;
|
|
274
283
|
const messages = getCursorConversationMessages(context);
|
|
275
284
|
let index = messages.length - 1;
|
|
276
285
|
while (index >= 0 && messages[index]?.role === "user") {
|
|
@@ -280,18 +289,8 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
280
289
|
const message = messages[index];
|
|
281
290
|
if (message.role !== "toolResult")
|
|
282
291
|
break;
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const replayRun = getUndisposed(replayId);
|
|
286
|
-
if (replayRun)
|
|
287
|
-
return replayRun;
|
|
288
|
-
}
|
|
289
|
-
for (const run of pendingRuns.values()) {
|
|
290
|
-
if (run.disposed)
|
|
291
|
-
continue;
|
|
292
|
-
if (run.bridgeRun?.hasPendingPiToolCallId(message.toolCallId))
|
|
293
|
-
return run;
|
|
294
|
-
}
|
|
292
|
+
if (matchesCursorLiveRunToolResult(run, message, getReplayId))
|
|
293
|
+
return run;
|
|
295
294
|
}
|
|
296
295
|
return undefined;
|
|
297
296
|
},
|
|
@@ -349,10 +348,16 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
349
348
|
const state = getPrivateState(run);
|
|
350
349
|
clearIdleDisposeTimer(run);
|
|
351
350
|
state.idleDisposeRequested = true;
|
|
352
|
-
if (state.leased || state.leaseQueue.length > 0
|
|
351
|
+
if (state.leased || state.leaseQueue.length > 0 ||
|
|
352
|
+
[run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls()))
|
|
353
353
|
return;
|
|
354
|
-
state.idleDisposeRequested = false;
|
|
355
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
|
+
}
|
|
356
361
|
void coordinator.release(run).catch(() => {
|
|
357
362
|
// Idle dispose must not leave release failures as unhandled rejections.
|
|
358
363
|
});
|
|
@@ -368,6 +373,15 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
368
373
|
return;
|
|
369
374
|
const abandoned = !isSuccessfulCursorLiveRun(run);
|
|
370
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 = [];
|
|
371
385
|
unregister(run);
|
|
372
386
|
clearIdleDisposeTimer(run);
|
|
373
387
|
state.idleDisposeRequested = false;
|
|
@@ -389,12 +403,14 @@ export function createCursorLiveRunCoordinator(deps) {
|
|
|
389
403
|
}
|
|
390
404
|
if (abandoned) {
|
|
391
405
|
if (!run.done) {
|
|
406
|
+
const usageCompletion = run.onAbandon?.();
|
|
392
407
|
try {
|
|
393
408
|
await cancelCursorLiveSdkRun(run);
|
|
394
409
|
}
|
|
395
410
|
catch {
|
|
396
411
|
// cancellation failure should not block session-agent abandonment
|
|
397
412
|
}
|
|
413
|
+
await usageCompletion;
|
|
398
414
|
}
|
|
399
415
|
await deps.abandonSessionAgent(run.sessionAgentScopeKey);
|
|
400
416
|
}
|
|
@@ -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;
|
|
@@ -8,7 +8,7 @@ export function isNativeToolActiveInContext(toolName, activeToolNames) {
|
|
|
8
8
|
* Extension resync (pi active tools) is separate; this uses context.tools snapshot only.
|
|
9
9
|
*/
|
|
10
10
|
export function resolveNativeReplayDisposition(input) {
|
|
11
|
-
if (!input.useNativeToolReplay || !canRenderCursorToolNatively(input.toolName)) {
|
|
11
|
+
if (!input.useNativeToolReplay || !(input.registeredToolNames?.has(input.toolName) ?? canRenderCursorToolNatively(input.toolName))) {
|
|
12
12
|
return "transcript_trace";
|
|
13
13
|
}
|
|
14
14
|
if (isNativeToolActiveInContext(input.toolName, input.activeToolNames) && input.hasLiveRun) {
|
|
@@ -2,7 +2,7 @@ import { arePiToolsDisabled } from "./cursor-active-tools.js";
|
|
|
2
2
|
import { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, isNativeCursorToolName, NATIVE_CURSOR_TOOL_NAMES, } from "./cursor-native-tool-names.js";
|
|
3
3
|
import { isCursorModel } from "./cursor-model.js";
|
|
4
4
|
import { registerCursorModelLifecycle } from "./cursor-model-lifecycle.js";
|
|
5
|
-
import { isCursorNativeToolDisplayRequested, isCursorNativeToolRegistrationRequested, NATIVE_CURSOR_TOOL_DISPLAY_ENV, readBooleanEnv,
|
|
5
|
+
import { isCursorNativeToolDisplayRequested, isCursorNativeToolRegistrationRequested, NATIVE_CURSOR_TOOL_DISPLAY_ENV, readBooleanEnv, getCursorNativeToolDisplayState, registerCursorNativeToolDisplayState, setCursorNativeToolDisplayRuntimeRequested, } from "./cursor-native-tool-display-state.js";
|
|
6
6
|
import { isCursorReplayToolName } from "./cursor-tool-presentation-registry.js";
|
|
7
7
|
import { registerNativeCursorTool } from "./cursor-native-tool-display-tools.js";
|
|
8
8
|
export const CURSOR_CORE_PI_REPLAY_TOOL_NAMES = ["read", "bash", "edit", "write"];
|
|
@@ -10,22 +10,37 @@ const CORE_PI_TOOL_NAMES = new Set(CURSOR_CORE_PI_REPLAY_TOOL_NAMES);
|
|
|
10
10
|
function isCursorCorePiReplayToolName(toolName) {
|
|
11
11
|
return CORE_PI_TOOL_NAMES.has(toolName);
|
|
12
12
|
}
|
|
13
|
+
// Pi filters getAllTools even after registration; new/reloaded extensions receive a new API.
|
|
14
|
+
const filteredRegistrations = new WeakMap();
|
|
13
15
|
function hasNonBuiltinTool(pi, toolName) {
|
|
14
16
|
const existingTool = pi.getAllTools().find((tool) => tool.name === toolName);
|
|
15
17
|
return existingTool !== undefined && existingTool.sourceInfo.source !== "builtin";
|
|
16
18
|
}
|
|
17
|
-
function registerNativeCursorToolsFromSet(pi, toolNames) {
|
|
19
|
+
function registerNativeCursorToolsFromSet(pi, toolNames, getCwd) {
|
|
20
|
+
const state = getCursorNativeToolDisplayState(pi);
|
|
21
|
+
const { registeredNativeToolSources, skippedNativeToolNames } = state;
|
|
22
|
+
let filteredToolNames = filteredRegistrations.get(pi);
|
|
23
|
+
if (!filteredToolNames) {
|
|
24
|
+
filteredToolNames = new Set();
|
|
25
|
+
filteredRegistrations.set(pi, filteredToolNames);
|
|
26
|
+
}
|
|
18
27
|
const newlySkippedToolNames = [];
|
|
19
28
|
for (const toolName of toolNames) {
|
|
20
|
-
if (
|
|
29
|
+
if (registeredNativeToolSources.has(toolName) || filteredToolNames.has(toolName))
|
|
21
30
|
continue;
|
|
22
31
|
if (hasNonBuiltinTool(pi, toolName)) {
|
|
23
|
-
skippedNativeToolNames.
|
|
24
|
-
|
|
32
|
+
if (!skippedNativeToolNames.has(toolName)) {
|
|
33
|
+
skippedNativeToolNames.add(toolName);
|
|
34
|
+
newlySkippedToolNames.push(toolName);
|
|
35
|
+
}
|
|
25
36
|
continue;
|
|
26
37
|
}
|
|
27
|
-
registerNativeCursorTool(pi, toolName);
|
|
28
|
-
|
|
38
|
+
registerNativeCursorTool(pi, toolName, getCwd, state);
|
|
39
|
+
const registeredTool = pi.getAllTools().find((tool) => tool.name === toolName);
|
|
40
|
+
if (registeredTool)
|
|
41
|
+
registeredNativeToolSources.set(toolName, registeredTool.sourceInfo);
|
|
42
|
+
else
|
|
43
|
+
filteredToolNames.add(toolName);
|
|
29
44
|
}
|
|
30
45
|
return newlySkippedToolNames;
|
|
31
46
|
}
|
|
@@ -34,15 +49,13 @@ function notifySkippedNativeCursorToolsIfNeeded(ctx, skippedToolNames) {
|
|
|
34
49
|
return;
|
|
35
50
|
ctx.ui.notify(`Cursor native tool replay skipped for ${skippedToolNames.join(", ")} because another extension already provides ${skippedToolNames.length === 1 ? "that tool" : "those tools"}. Cursor will use scrubbed activity transcripts for skipped tools.`, "warning");
|
|
36
51
|
}
|
|
37
|
-
function hasAttemptedNativeCursorToolRegistration() {
|
|
38
|
-
return registeredNativeToolNames.size > 0 || skippedNativeToolNames.size > 0;
|
|
39
|
-
}
|
|
40
52
|
function removeRegisteredNonCoreNativeCursorTools(pi) {
|
|
41
|
-
|
|
53
|
+
const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
|
|
54
|
+
if (registeredNativeToolSources.size === 0)
|
|
42
55
|
return;
|
|
43
56
|
const activeToolNames = new Set(pi.getActiveTools());
|
|
44
57
|
let changed = false;
|
|
45
|
-
for (const toolName of
|
|
58
|
+
for (const toolName of registeredNativeToolSources.keys()) {
|
|
46
59
|
if (isCursorCorePiReplayToolName(toolName))
|
|
47
60
|
continue;
|
|
48
61
|
if (!activeToolNames.delete(toolName))
|
|
@@ -53,7 +66,8 @@ function removeRegisteredNonCoreNativeCursorTools(pi) {
|
|
|
53
66
|
pi.setActiveTools([...activeToolNames]);
|
|
54
67
|
}
|
|
55
68
|
export function syncRegisteredNativeCursorToolsForModel(pi, model) {
|
|
56
|
-
|
|
69
|
+
const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
|
|
70
|
+
if (registeredNativeToolSources.size === 0)
|
|
57
71
|
return;
|
|
58
72
|
if (!isCursorModel(model)) {
|
|
59
73
|
removeRegisteredNonCoreNativeCursorTools(pi);
|
|
@@ -63,7 +77,7 @@ export function syncRegisteredNativeCursorToolsForModel(pi, model) {
|
|
|
63
77
|
return;
|
|
64
78
|
const activeToolNames = new Set(pi.getActiveTools());
|
|
65
79
|
let changed = false;
|
|
66
|
-
for (const toolName of
|
|
80
|
+
for (const toolName of registeredNativeToolSources.keys()) {
|
|
67
81
|
if (isCursorReplayToolName(toolName) && !CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES.some((activeReplayToolName) => activeReplayToolName === toolName))
|
|
68
82
|
continue;
|
|
69
83
|
if (activeToolNames.has(toolName))
|
|
@@ -74,29 +88,39 @@ export function syncRegisteredNativeCursorToolsForModel(pi, model) {
|
|
|
74
88
|
if (changed)
|
|
75
89
|
pi.setActiveTools([...activeToolNames]);
|
|
76
90
|
}
|
|
77
|
-
function ensureNativeCursorToolsRegisteredForModel(pi, ctx) {
|
|
78
|
-
if (!isCursorModel(ctx.model)
|
|
91
|
+
function ensureNativeCursorToolsRegisteredForModel(pi, ctx, getCwd) {
|
|
92
|
+
if (!isCursorModel(ctx.model))
|
|
79
93
|
return;
|
|
80
94
|
const nonCoreToolNames = NATIVE_CURSOR_TOOL_NAMES.filter((toolName) => !isCursorCorePiReplayToolName(toolName));
|
|
81
95
|
const skippedToolNames = [
|
|
82
|
-
...registerNativeCursorToolsFromSet(pi, nonCoreToolNames),
|
|
83
|
-
...registerNativeCursorToolsFromSet(pi, CURSOR_CORE_PI_REPLAY_TOOL_NAMES),
|
|
96
|
+
...registerNativeCursorToolsFromSet(pi, nonCoreToolNames, getCwd),
|
|
97
|
+
...registerNativeCursorToolsFromSet(pi, CURSOR_CORE_PI_REPLAY_TOOL_NAMES, getCwd),
|
|
84
98
|
];
|
|
85
99
|
notifySkippedNativeCursorToolsIfNeeded(ctx, skippedToolNames);
|
|
86
100
|
}
|
|
87
|
-
function ensureThenSyncNativeCursorToolsForModel(pi, ctx) {
|
|
101
|
+
function ensureThenSyncNativeCursorToolsForModel(pi, ctx, getCwd) {
|
|
102
|
+
const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
|
|
103
|
+
const currentTools = pi.getAllTools();
|
|
104
|
+
for (const [toolName, sourceInfo] of registeredNativeToolSources) {
|
|
105
|
+
if (!currentTools.some((tool) => tool.name === toolName && tool.sourceInfo === sourceInfo)) {
|
|
106
|
+
registeredNativeToolSources.delete(toolName);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
88
109
|
const requested = isCursorNativeToolRegistrationRequested(ctx.mode);
|
|
89
|
-
setCursorNativeToolDisplayRuntimeRequested(requested);
|
|
110
|
+
setCursorNativeToolDisplayRuntimeRequested(requested, pi);
|
|
90
111
|
if (!requested) {
|
|
91
112
|
removeRegisteredNonCoreNativeCursorTools(pi);
|
|
92
113
|
return;
|
|
93
114
|
}
|
|
94
|
-
ensureNativeCursorToolsRegisteredForModel(pi, ctx);
|
|
115
|
+
ensureNativeCursorToolsRegisteredForModel(pi, ctx, getCwd);
|
|
95
116
|
syncRegisteredNativeCursorToolsForModel(pi, ctx.model);
|
|
96
117
|
}
|
|
97
118
|
export function registerCursorNativeToolDisplay(pi) {
|
|
119
|
+
registerCursorNativeToolDisplayState(pi);
|
|
120
|
+
let cwd = process.cwd();
|
|
98
121
|
registerCursorModelLifecycle(pi, (ctx) => {
|
|
99
|
-
|
|
122
|
+
cwd = ctx.cwd;
|
|
123
|
+
ensureThenSyncNativeCursorToolsForModel(pi, ctx, () => cwd);
|
|
100
124
|
});
|
|
101
125
|
}
|
|
102
126
|
export { isNativeCursorToolName, isCursorNativeToolDisplayRequested };
|
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
import { parseOptionalEnvBoolean } from "./cursor-env-boolean.js";
|
|
2
|
+
import { normalizeCursorToolName } from "./cursor-tool-presentation-registry.js";
|
|
2
3
|
export const NATIVE_CURSOR_TOOL_DISPLAY_ENV = "PI_CURSOR_NATIVE_TOOL_DISPLAY";
|
|
3
4
|
export const NATIVE_CURSOR_TOOL_REGISTRATION_ENV = "PI_CURSOR_REGISTER_NATIVE_TOOLS";
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
function createDisplayState() {
|
|
6
|
+
return { registeredNativeToolSources: new Map(), skippedNativeToolNames: new Set(), runtimeRequested: false, resultIds: new Set() };
|
|
7
|
+
}
|
|
8
|
+
let lastDisplayState = createDisplayState();
|
|
9
|
+
const displayStates = new Map();
|
|
10
|
+
// IDs index results; the owning display state and tool authorize consumption.
|
|
6
11
|
export const nativeToolResults = new Map();
|
|
7
|
-
|
|
12
|
+
const resultStates = new Map();
|
|
13
|
+
export function getCursorNativeToolDisplayState(pi) {
|
|
14
|
+
if (!pi)
|
|
15
|
+
return lastDisplayState;
|
|
16
|
+
const state = displayStates.get(pi);
|
|
17
|
+
if (!state)
|
|
18
|
+
throw new Error("Cursor native display binding is no longer active.");
|
|
19
|
+
return state;
|
|
20
|
+
}
|
|
21
|
+
export function registerCursorNativeToolDisplayState(pi) {
|
|
22
|
+
const state = createDisplayState();
|
|
23
|
+
displayStates.set(pi, state);
|
|
24
|
+
lastDisplayState = state;
|
|
25
|
+
pi.on("session_shutdown", () => {
|
|
26
|
+
displayStates.delete(pi);
|
|
27
|
+
for (const id of state.resultIds) {
|
|
28
|
+
nativeToolResults.delete(id);
|
|
29
|
+
resultStates.delete(id);
|
|
30
|
+
}
|
|
31
|
+
state.resultIds.clear();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
8
34
|
export function readBooleanEnv(name, env = process.env) {
|
|
9
35
|
return parseOptionalEnvBoolean(env[name]);
|
|
10
36
|
}
|
|
@@ -19,34 +45,42 @@ export function isCursorNativeToolDisplayRequested(mode) {
|
|
|
19
45
|
export function isCursorNativeToolRegistrationRequested(mode) {
|
|
20
46
|
return mode !== "print" && readBooleanEnv(NATIVE_CURSOR_TOOL_REGISTRATION_ENV) !== false && isCursorNativeToolDisplayRequested(mode);
|
|
21
47
|
}
|
|
22
|
-
export function setCursorNativeToolDisplayRuntimeRequested(requested) {
|
|
23
|
-
|
|
48
|
+
export function setCursorNativeToolDisplayRuntimeRequested(requested, pi) {
|
|
49
|
+
getCursorNativeToolDisplayState(pi).runtimeRequested = requested;
|
|
24
50
|
}
|
|
25
51
|
export function isCursorNativeToolDisplayEnabled() {
|
|
26
|
-
return
|
|
52
|
+
return getCursorNativeToolDisplayState().registeredNativeToolSources.size > 0;
|
|
27
53
|
}
|
|
28
|
-
export function isCursorNativeToolDisplayRuntimeEnabled() {
|
|
29
|
-
return
|
|
54
|
+
export function isCursorNativeToolDisplayRuntimeEnabled(state = getCursorNativeToolDisplayState()) {
|
|
55
|
+
return state.runtimeRequested && readBooleanEnv(NATIVE_CURSOR_TOOL_DISPLAY_ENV) !== false && state.registeredNativeToolSources.size > 0;
|
|
30
56
|
}
|
|
31
57
|
export function canRenderCursorToolNatively(toolName) {
|
|
32
|
-
return
|
|
58
|
+
return getCursorNativeToolDisplayState().registeredNativeToolSources.has(toolName);
|
|
33
59
|
}
|
|
34
|
-
export function isRegisteredCursorNativeToolName(toolName) {
|
|
35
|
-
return
|
|
60
|
+
export function isRegisteredCursorNativeToolName(toolName, pi) {
|
|
61
|
+
return (pi ? displayStates.get(pi) : lastDisplayState)?.registeredNativeToolSources.has(toolName) === true;
|
|
36
62
|
}
|
|
37
|
-
export function recordCursorNativeToolDisplay(item) {
|
|
38
|
-
if (!
|
|
63
|
+
export function recordCursorNativeToolDisplay(item, state = getCursorNativeToolDisplayState()) {
|
|
64
|
+
if (!state.registeredNativeToolSources.has(item.toolName))
|
|
39
65
|
return false;
|
|
40
66
|
nativeToolResults.set(item.id, item);
|
|
67
|
+
resultStates.set(item.id, state);
|
|
68
|
+
state.resultIds.add(item.id);
|
|
41
69
|
return true;
|
|
42
70
|
}
|
|
43
71
|
export function deleteCursorNativeToolDisplay(id) {
|
|
44
72
|
nativeToolResults.delete(id);
|
|
73
|
+
resultStates.get(id)?.resultIds.delete(id);
|
|
74
|
+
resultStates.delete(id);
|
|
45
75
|
}
|
|
46
|
-
export function consumeCursorNativeToolDisplay(id) {
|
|
76
|
+
export function consumeCursorNativeToolDisplay(id, state, toolName) {
|
|
47
77
|
const item = nativeToolResults.get(id);
|
|
48
|
-
if (item)
|
|
49
|
-
|
|
78
|
+
if (item) {
|
|
79
|
+
if (resultStates.get(id) !== state || normalizeCursorToolName(item.toolName) !== normalizeCursorToolName(toolName)) {
|
|
80
|
+
throw new Error(`No owned Cursor ${toolName} result was available. This replay-only call does not execute work.`);
|
|
81
|
+
}
|
|
82
|
+
deleteCursorNativeToolDisplay(id);
|
|
83
|
+
}
|
|
50
84
|
return item;
|
|
51
85
|
}
|
|
52
86
|
export function isCursorReplayToolCallId(toolCallId) {
|
|
@@ -57,14 +91,15 @@ export function isCursorFileMutationToolName(toolName) {
|
|
|
57
91
|
}
|
|
58
92
|
export const __testUtils = {
|
|
59
93
|
nativeToolResultCount: () => nativeToolResults.size,
|
|
60
|
-
registerNativeToolNameForTests(toolName) {
|
|
61
|
-
|
|
62
|
-
|
|
94
|
+
registerNativeToolNameForTests(toolName, pi) {
|
|
95
|
+
const state = getCursorNativeToolDisplayState(pi);
|
|
96
|
+
state.runtimeRequested = true;
|
|
97
|
+
state.registeredNativeToolSources.set(toolName, { path: "test", source: "inline", scope: "temporary", origin: "top-level" });
|
|
63
98
|
},
|
|
64
99
|
reset() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
skippedNativeToolNames.clear();
|
|
100
|
+
lastDisplayState = createDisplayState();
|
|
101
|
+
displayStates.clear();
|
|
68
102
|
nativeToolResults.clear();
|
|
103
|
+
resultStates.clear();
|
|
69
104
|
},
|
|
70
105
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createBashToolDefinition, createEditToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createWriteToolDefinition, } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { Text } from "@earendil-works/pi-tui";
|
|
3
|
-
import { getCursorSessionCwd } from "./cursor-session-scope.js";
|
|
4
3
|
import { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, CURSOR_REPLAY_TOOL_NAMES, } from "./cursor-native-tool-names.js";
|
|
5
4
|
import { isCursorReplayToolName } from "./cursor-tool-presentation-registry.js";
|
|
6
5
|
import { createCursorReplayOnlyToolDefinition, isCursorReplayNativeEditDetails, isCursorReplayNativeWriteDetails, parseCursorReplayToolDetails, renderCursorReplayResult, renderNativeLookingCursorFileMutationCall, renderNativeLookingCursorReadReplayResult, } from "./cursor-native-tool-display-replay.js";
|
|
@@ -61,12 +60,12 @@ function getNativeReplayStrategy(toolName) {
|
|
|
61
60
|
? NATIVE_CURSOR_TOOL_STRATEGIES[toolName]
|
|
62
61
|
: undefined;
|
|
63
62
|
}
|
|
64
|
-
export function wrapNativeCursorTool(definition, getCurrentDefinition) {
|
|
63
|
+
export function wrapNativeCursorTool(definition, getCurrentDefinition, state) {
|
|
65
64
|
const strategy = getNativeReplayStrategy(definition.name);
|
|
66
65
|
return {
|
|
67
66
|
...definition,
|
|
68
67
|
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
69
|
-
const cursorDisplay = consumeCursorNativeToolDisplay(toolCallId);
|
|
68
|
+
const cursorDisplay = consumeCursorNativeToolDisplay(toolCallId, state, definition.name);
|
|
70
69
|
if (cursorDisplay) {
|
|
71
70
|
if (cursorDisplay.isError) {
|
|
72
71
|
const text = cursorDisplay.result.content
|
|
@@ -114,8 +113,8 @@ export function createNativeCursorToolDefinition(toolName, cwd) {
|
|
|
114
113
|
return createCursorReplayOnlyToolDefinition(toolName);
|
|
115
114
|
throw new Error(`Unsupported Cursor native replay tool: ${toolName}`);
|
|
116
115
|
}
|
|
117
|
-
export function registerNativeCursorTool(pi, toolName) {
|
|
118
|
-
const definition = createNativeCursorToolDefinition(toolName,
|
|
119
|
-
pi.registerTool(wrapNativeCursorTool(definition, () => createNativeCursorToolDefinition(toolName,
|
|
116
|
+
export function registerNativeCursorTool(pi, toolName, getCwd, state) {
|
|
117
|
+
const definition = createNativeCursorToolDefinition(toolName, getCwd());
|
|
118
|
+
pi.registerTool(wrapNativeCursorTool(definition, () => createNativeCursorToolDefinition(toolName, getCwd()), state));
|
|
120
119
|
}
|
|
121
120
|
export { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, CURSOR_REPLAY_TOOL_NAMES };
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
export const MCP_SERVER_NAME = "pi_tools";
|
|
2
2
|
export const MCP_ENDPOINT_ROOT = "/cursor-pi-tool-bridge";
|
|
3
|
-
const
|
|
3
|
+
export const CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH = 64;
|
|
4
|
+
const CURSOR_PI_BRIDGE_RUN_UUID_PATTERN = /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i;
|
|
5
|
+
const CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN = /^cursor-pi-bridge-[0-9a-f]{32}-t\d+$/i;
|
|
6
|
+
const LEGACY_CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN = /^cursor-pi-bridge-run-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}-tool-\d+$/i;
|
|
7
|
+
/**
|
|
8
|
+
* Build the provider-facing bridge ID while enforcing the 64-character
|
|
9
|
+
* call_id limit used by OpenAI-compatible Responses backends.
|
|
10
|
+
*/
|
|
11
|
+
export function buildCursorPiBridgeToolCallId(runUuid, counter) {
|
|
12
|
+
if (!CURSOR_PI_BRIDGE_RUN_UUID_PATTERN.test(runUuid)) {
|
|
13
|
+
throw new Error("Cursor pi bridge run UUID must be canonical");
|
|
14
|
+
}
|
|
15
|
+
if (!Number.isSafeInteger(counter) || counter <= 0) {
|
|
16
|
+
throw new Error("Cursor pi bridge tool call counter must be a positive safe integer");
|
|
17
|
+
}
|
|
18
|
+
const toolCallId = `cursor-pi-bridge-${runUuid.replaceAll("-", "")}-t${counter}`;
|
|
19
|
+
if (toolCallId.length > CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH) {
|
|
20
|
+
throw new Error("Cursor pi bridge tool call ID limit exceeded");
|
|
21
|
+
}
|
|
22
|
+
return toolCallId;
|
|
23
|
+
}
|
|
4
24
|
export function isCursorPiBridgeToolCallId(toolCallId) {
|
|
5
|
-
return CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId)
|
|
25
|
+
return ((toolCallId.length <= CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH && CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId)) ||
|
|
26
|
+
LEGACY_CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId));
|
|
6
27
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { Server as McpProtocolServer, WebStandardStreamableHTTPServerTransport, } from "@modelcontextprotocol/server";
|
|
3
3
|
import { bridgeToolExecutionAbortTracker } from "./cursor-pi-tool-bridge-abort.js";
|
|
4
|
-
import { MCP_ENDPOINT_ROOT, MCP_SERVER_NAME } from "./cursor-pi-tool-bridge-constants.js";
|
|
4
|
+
import { buildCursorPiBridgeToolCallId, MCP_ENDPOINT_ROOT, MCP_SERVER_NAME, } from "./cursor-pi-tool-bridge-constants.js";
|
|
5
5
|
import { writeCursorPiToolBridgeDiagnostic, } from "./cursor-pi-tool-bridge-diagnostics.js";
|
|
6
6
|
import { resolveCursorPiToolBridgeCallTimeoutMs } from "./cursor-pi-tool-bridge-env.js";
|
|
7
7
|
import { asToolResultMessage, containsKnownMcpToolName, convertPiContentToMcpContent, normalizeMcpArgs, snapshotToolToMcpTool, waitForProtocolFlush, } from "./cursor-pi-tool-bridge-mcp.js";
|
|
@@ -15,10 +15,12 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
15
15
|
registry;
|
|
16
16
|
env;
|
|
17
17
|
endpointPath;
|
|
18
|
+
runUuid;
|
|
18
19
|
callTimeoutMs;
|
|
19
20
|
knownMcpToolNames;
|
|
20
21
|
knownCursorMcpCallIds = new Set();
|
|
21
22
|
queuedRequests = [];
|
|
23
|
+
pendingToolCallListeners = new Set();
|
|
22
24
|
pendingByPiToolCallId = new Map();
|
|
23
25
|
pendingByBridgeCallId = new Map();
|
|
24
26
|
pendingByCursorMcpCallId = new Map();
|
|
@@ -36,7 +38,9 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
36
38
|
this.enabled = enabled;
|
|
37
39
|
this.onToolRequest = options.onToolRequest;
|
|
38
40
|
this.debugRecorder = options.debugRecorder;
|
|
39
|
-
|
|
41
|
+
const runUuid = randomUUID();
|
|
42
|
+
this.runUuid = runUuid;
|
|
43
|
+
this.id = `cursor-pi-bridge-run-${runUuid}`;
|
|
40
44
|
this.endpointPath = `${MCP_ENDPOINT_ROOT}/${randomUUID()}/mcp`;
|
|
41
45
|
this.callTimeoutMs = resolveCursorPiToolBridgeCallTimeoutMs(env);
|
|
42
46
|
this.knownMcpToolNames = new Set(snapshot.tools.map((tool) => tool.mcpToolName));
|
|
@@ -126,6 +130,23 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
126
130
|
hasPendingPiToolCallId(piToolCallId) {
|
|
127
131
|
return this.pendingByPiToolCallId.has(piToolCallId);
|
|
128
132
|
}
|
|
133
|
+
hasPendingToolCalls() {
|
|
134
|
+
return this.pendingCount() > 0;
|
|
135
|
+
}
|
|
136
|
+
onPendingToolCallsChanged(listener) {
|
|
137
|
+
this.pendingToolCallListeners.add(listener);
|
|
138
|
+
return () => { this.pendingToolCallListeners.delete(listener); };
|
|
139
|
+
}
|
|
140
|
+
notifyPendingToolCallsChanged() {
|
|
141
|
+
for (const listener of this.pendingToolCallListeners) {
|
|
142
|
+
try {
|
|
143
|
+
listener();
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Observers must not prevent call registration or protocol settlement.
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
129
150
|
cancelPendingPiToolCallId(piToolCallId, reason) {
|
|
130
151
|
const pending = this.pendingByPiToolCallId.get(piToolCallId);
|
|
131
152
|
if (!pending)
|
|
@@ -170,6 +191,7 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
170
191
|
return;
|
|
171
192
|
this.disposed = true;
|
|
172
193
|
this.cancel("Cursor pi tool bridge run disposed");
|
|
194
|
+
this.pendingToolCallListeners.clear();
|
|
173
195
|
await waitForProtocolFlush();
|
|
174
196
|
await Promise.allSettled([
|
|
175
197
|
this.mcpTransport?.close(),
|
|
@@ -208,11 +230,12 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
208
230
|
return Promise.reject(new Error("Cursor pi tool bridge run is disposed"));
|
|
209
231
|
this.toolCallCounter += 1;
|
|
210
232
|
const bridgeCallId = `${this.id}-bridge-${this.toolCallCounter}`;
|
|
233
|
+
const piToolCallId = buildCursorPiBridgeToolCallId(this.runUuid, this.toolCallCounter);
|
|
211
234
|
const request = {
|
|
212
235
|
runId: this.id,
|
|
213
236
|
bridgeCallId,
|
|
214
237
|
cursorMcpCallId,
|
|
215
|
-
piToolCallId
|
|
238
|
+
piToolCallId,
|
|
216
239
|
piToolName,
|
|
217
240
|
mcpToolName,
|
|
218
241
|
args: normalizeMcpArgs(argsValue),
|
|
@@ -237,6 +260,7 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
237
260
|
this.pendingByBridgeCallId.set(request.bridgeCallId, pending);
|
|
238
261
|
this.pendingByCursorMcpCallId.set(cursorMcpCallId, pending);
|
|
239
262
|
this.knownCursorMcpCallIds.add(cursorMcpCallId);
|
|
263
|
+
this.notifyPendingToolCallsChanged();
|
|
240
264
|
pending.timeout = setTimeout(() => {
|
|
241
265
|
const reason = `Cursor pi bridge CallTool timed out after ${this.callTimeoutMs} ms`;
|
|
242
266
|
this.rejectAndAbortPending(pending, new Error(reason));
|
|
@@ -348,5 +372,6 @@ export class CursorPiToolBridgeRunImpl {
|
|
|
348
372
|
const queuedIndex = this.queuedRequests.findIndex((request) => request.bridgeCallId === pending.request.bridgeCallId);
|
|
349
373
|
if (queuedIndex >= 0)
|
|
350
374
|
this.queuedRequests.splice(queuedIndex, 1);
|
|
375
|
+
this.notifyPendingToolCallsChanged();
|
|
351
376
|
}
|
|
352
377
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
2
|
import { asRecord } from "./cursor-record-utils.js";
|
|
3
|
+
import { CursorPiToolBridgeRunImpl } from "./cursor-pi-tool-bridge-run.js";
|
|
3
4
|
import { buildCursorPiToolBridgeSnapshot, buildCursorPiToolBridgeSurfaceSignature, createEmptySnapshot, resolveCursorPiToolBridgeBuiltinsEnabled, resolveCursorPiToolBridgeEnabled, } from "./cursor-pi-tool-bridge-snapshot.js";
|
|
4
5
|
export const LOOPBACK_HOST = "127.0.0.1";
|
|
5
6
|
const HTTP_SERVER_CLOSE_GRACE_MS = 250;
|
|
@@ -33,7 +34,6 @@ export class CursorPiToolBridgeRegistry {
|
|
|
33
34
|
exposeOverlappingBuiltins: resolveCursorPiToolBridgeBuiltinsEnabled(this.env),
|
|
34
35
|
})
|
|
35
36
|
: createEmptySnapshot();
|
|
36
|
-
const { CursorPiToolBridgeRunImpl } = await import("./cursor-pi-tool-bridge-run.js");
|
|
37
37
|
const run = new CursorPiToolBridgeRunImpl(this, this.env, snapshot, bridgeEnabled && snapshot.tools.length > 0, options);
|
|
38
38
|
this.runs.add(run);
|
|
39
39
|
await run.start();
|
|
@@ -42,7 +42,7 @@ export function buildCursorPiToolBridgeSnapshot(pi, options = {}) {
|
|
|
42
42
|
for (const tool of allTools) {
|
|
43
43
|
if (!activeToolNames.has(tool.name))
|
|
44
44
|
continue;
|
|
45
|
-
if (isExcludedFromCursorBridgeExposure(tool.name) && isRegisteredCursorNativeToolName(tool.name))
|
|
45
|
+
if (isExcludedFromCursorBridgeExposure(tool.name) && isRegisteredCursorNativeToolName(tool.name, pi))
|
|
46
46
|
continue;
|
|
47
47
|
if (!exposeOverlappingBuiltins && isOverlappingCursorNativePiToolName(tool.name))
|
|
48
48
|
continue;
|
|
@@ -7,6 +7,8 @@ import { LOOPBACK_HOST, CursorPiToolBridgeRegistry } from "./cursor-pi-tool-brid
|
|
|
7
7
|
export { resolveCursorPiToolBridgeDebugEnabled } from "./cursor-pi-tool-bridge-diagnostics.js";
|
|
8
8
|
export { CURSOR_PI_TOOL_BRIDGE_BUILTINS_ENV, CURSOR_PI_TOOL_BRIDGE_CALL_TIMEOUT_MS_ENV, CURSOR_PI_TOOL_BRIDGE_ENV, resolveCursorPiToolBridgeBuiltinsEnabled, resolveCursorPiToolBridgeCallTimeoutMs, resolveCursorPiToolBridgeEnabled, } from "./cursor-pi-tool-bridge-env.js";
|
|
9
9
|
export { buildCursorPiToolBridgeSnapshot, buildCursorPiToolBridgeSurfaceSignature, } from "./cursor-pi-tool-bridge-snapshot.js";
|
|
10
|
+
const bridges = new Map();
|
|
11
|
+
const activeCallsByPi = new Map();
|
|
10
12
|
let registeredCursorPiToolBridge;
|
|
11
13
|
const WINDOWS_BRIDGE_ABORT_ENV = "PI_CURSOR_BRIDGE_TOOL_CALL_ID";
|
|
12
14
|
function buildWindowsBridgeBashAbortCommand(command, marker) {
|
|
@@ -49,18 +51,27 @@ Get-CimInstance Win32_Process -Filter "Name = 'bash.exe' OR Name = 'sh.exe'" |
|
|
|
49
51
|
});
|
|
50
52
|
}
|
|
51
53
|
export function registerCursorPiToolBridge(pi) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
const previous = bridges.get(pi);
|
|
55
|
+
if (previous) {
|
|
56
|
+
const reason = "Cursor pi tool bridge extension reloaded";
|
|
57
|
+
for (const id of activeCallsByPi.get(pi) ?? [])
|
|
58
|
+
bridgeToolExecutionAbortTracker.abort(id, reason);
|
|
59
|
+
void previous.disposeAll(reason);
|
|
60
|
+
}
|
|
54
61
|
const bridge = new CursorPiToolBridgeRegistry(pi);
|
|
55
62
|
registeredCursorPiToolBridge = bridge;
|
|
63
|
+
bridges.set(pi, bridge);
|
|
64
|
+
const activeCalls = new Set();
|
|
65
|
+
activeCallsByPi.set(pi, activeCalls);
|
|
56
66
|
pi.on("tool_call", (event, ctx) => {
|
|
57
|
-
if (
|
|
67
|
+
if (bridges.get(pi) !== bridge)
|
|
58
68
|
return undefined;
|
|
59
69
|
if (!bridge.hasPendingPiToolCallId(event.toolCallId)) {
|
|
60
70
|
return isCursorPiBridgeToolCallId(event.toolCallId)
|
|
61
71
|
? { block: true, reason: "Cursor pi bridge tool call is no longer pending" }
|
|
62
72
|
: undefined;
|
|
63
73
|
}
|
|
74
|
+
activeCalls.add(event.toolCallId);
|
|
64
75
|
const windowsAbortMarker = installWindowsBridgeBashAbortMarker(event);
|
|
65
76
|
const trackingStarted = bridgeToolExecutionAbortTracker.track(event.toolCallId, {
|
|
66
77
|
signal: ctx.signal,
|
|
@@ -77,17 +88,26 @@ export function registerCursorPiToolBridge(pi) {
|
|
|
77
88
|
return { block: true, reason: "Cursor pi bridge tool execution was aborted before it started" };
|
|
78
89
|
});
|
|
79
90
|
pi.on("tool_result", (event) => {
|
|
80
|
-
|
|
91
|
+
if (activeCalls.delete(event.toolCallId))
|
|
92
|
+
bridgeToolExecutionAbortTracker.finish(event.toolCallId);
|
|
81
93
|
});
|
|
82
94
|
pi.on("session_shutdown", async (event) => {
|
|
95
|
+
if (bridges.get(pi) !== bridge)
|
|
96
|
+
return;
|
|
83
97
|
const reason = `Cursor pi tool bridge session shutdown: ${event.reason}`;
|
|
84
|
-
|
|
98
|
+
for (const id of activeCalls)
|
|
99
|
+
bridgeToolExecutionAbortTracker.abort(id, reason);
|
|
100
|
+
activeCalls.clear();
|
|
101
|
+
bridges.delete(pi);
|
|
102
|
+
activeCallsByPi.delete(pi);
|
|
103
|
+
if (registeredCursorPiToolBridge === bridge)
|
|
104
|
+
registeredCursorPiToolBridge = [...bridges.values()].at(-1);
|
|
85
105
|
await bridge.disposeAll(reason);
|
|
86
106
|
});
|
|
87
107
|
return bridge;
|
|
88
108
|
}
|
|
89
|
-
export function getRegisteredCursorPiToolBridge() {
|
|
90
|
-
return registeredCursorPiToolBridge;
|
|
109
|
+
export function getRegisteredCursorPiToolBridge(pi) {
|
|
110
|
+
return pi ? bridges.get(pi) : registeredCursorPiToolBridge;
|
|
91
111
|
}
|
|
92
112
|
export const __testUtils = {
|
|
93
113
|
CURSOR_PI_TOOL_BRIDGE_ENV,
|
|
@@ -116,8 +136,10 @@ export const __testUtils = {
|
|
|
116
136
|
},
|
|
117
137
|
resetRegisteredBridgeForTests() {
|
|
118
138
|
bridgeToolExecutionAbortTracker.abortAll("Cursor pi tool bridge test reset");
|
|
119
|
-
const
|
|
139
|
+
const registered = [...bridges.values()];
|
|
140
|
+
bridges.clear();
|
|
141
|
+
activeCallsByPi.clear();
|
|
120
142
|
registeredCursorPiToolBridge = undefined;
|
|
121
|
-
return bridge
|
|
143
|
+
return Promise.all(registered.map((bridge) => bridge.disposeAll("Cursor pi tool bridge test reset")));
|
|
122
144
|
},
|
|
123
145
|
};
|