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
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
type CursorLiveToolResultConsumption,
|
|
12
12
|
} from "./cursor-live-run-accounting.js";
|
|
13
13
|
import type { CursorSdkTurnUsage } from "./cursor-usage-accounting.js";
|
|
14
|
-
import type { CursorNativeToolDisplayItem } from "./cursor-native-tool-display-state.js";
|
|
14
|
+
import type { CursorNativeToolDisplayItem, CursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
|
|
15
15
|
import type { CursorPiBridgeToolRequest, CursorPiToolBridgeRun } from "./cursor-pi-tool-bridge.js";
|
|
16
16
|
import { getCursorSessionScopeKey } from "./cursor-session-scope.js";
|
|
17
17
|
import type { CursorSdkEventDebugRecorder } from "./cursor-sdk-event-debug.js";
|
|
@@ -45,7 +45,7 @@ export interface CursorLiveRun {
|
|
|
45
45
|
sdkRun?: CursorLiveSdkRun;
|
|
46
46
|
ignoreFutureSdkTurnUsage?: boolean;
|
|
47
47
|
accounting: CursorLiveRunAccountingState;
|
|
48
|
-
|
|
48
|
+
onAbandon?: () => Promise<void>;
|
|
49
49
|
pendingEvents: CursorLiveQueuedEvent[];
|
|
50
50
|
textDeltas: string[];
|
|
51
51
|
emittedText: string;
|
|
@@ -59,6 +59,7 @@ export interface CursorLiveRun {
|
|
|
59
59
|
abortMessage?: string;
|
|
60
60
|
chainUserInputAfterCompletion: boolean;
|
|
61
61
|
debugRecorder?: CursorSdkEventDebugRecorder;
|
|
62
|
+
nativeDisplay?: CursorNativeToolDisplayState;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
export interface CursorLiveRunCreateParams {
|
|
@@ -70,6 +71,7 @@ export interface CursorLiveRunCreateParams {
|
|
|
70
71
|
promptInputTokens: number;
|
|
71
72
|
textDeltas?: string[];
|
|
72
73
|
debugRecorder?: CursorSdkEventDebugRecorder;
|
|
74
|
+
nativeDisplay?: CursorNativeToolDisplayState;
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
export interface CursorLiveRunCoordinatorDeps {
|
|
@@ -96,7 +98,7 @@ export interface CursorLiveRunCoordinator {
|
|
|
96
98
|
consumeToolResults(run: CursorLiveRun, context: Context, getReplayId: CursorReplayIdResolver): CursorLiveToolResultConsumption;
|
|
97
99
|
takeTurnInputTokens(run: CursorLiveRun, toolResultInputTokens: number): number;
|
|
98
100
|
takeSdkTurnUsage(run: CursorLiveRun): CursorSdkTurnUsage | undefined;
|
|
99
|
-
getPendingFromContext(context: Context, getReplayId: CursorReplayIdResolver): CursorLiveRun | undefined;
|
|
101
|
+
getPendingFromContext(context: Context, getReplayId: CursorReplayIdResolver, scopeKey: string): CursorLiveRun | undefined;
|
|
100
102
|
getActiveForScope(scopeKey?: string): CursorLiveRun | undefined;
|
|
101
103
|
isReady(run: CursorLiveRun): boolean;
|
|
102
104
|
waitForProgress(run: CursorLiveRun, signal?: AbortSignal): Promise<void>;
|
|
@@ -151,6 +153,7 @@ interface CursorLiveRunPrivateState {
|
|
|
151
153
|
waiters: Set<ProgressWaiter>;
|
|
152
154
|
idleDisposeTimer?: ReturnType<typeof setTimeout>;
|
|
153
155
|
idleDisposeRequested: boolean;
|
|
156
|
+
pendingCallUnsubscribers?: Array<() => void>;
|
|
154
157
|
leased: boolean;
|
|
155
158
|
leaseQueue: LeaseWaiter[];
|
|
156
159
|
releasing?: Promise<void>;
|
|
@@ -293,6 +296,7 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
293
296
|
bridgeRun: params.bridgeRun,
|
|
294
297
|
sessionBridgeRun: params.sessionBridgeRun,
|
|
295
298
|
sessionAgentScopeKey,
|
|
299
|
+
nativeDisplay: params.nativeDisplay,
|
|
296
300
|
accounting: createCursorLiveRunAccountingState(params.promptInputTokens),
|
|
297
301
|
pendingEvents: [],
|
|
298
302
|
textDeltas: params.textDeltas ?? [],
|
|
@@ -310,6 +314,12 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
310
314
|
leased: false,
|
|
311
315
|
leaseQueue: [],
|
|
312
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
|
+
);
|
|
313
323
|
pendingRuns.set(run.id, run);
|
|
314
324
|
pendingRunIdsByScopeKey.set(sessionAgentScopeKey, run.id);
|
|
315
325
|
return run;
|
|
@@ -420,7 +430,9 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
420
430
|
return taken.sdkTurnUsage;
|
|
421
431
|
},
|
|
422
432
|
|
|
423
|
-
getPendingFromContext(context, getReplayId): CursorLiveRun | undefined {
|
|
433
|
+
getPendingFromContext(context, getReplayId, scopeKey): CursorLiveRun | undefined {
|
|
434
|
+
const run = getUndisposed(pendingRunIdsByScopeKey.get(scopeKey));
|
|
435
|
+
if (!run) return undefined;
|
|
424
436
|
const messages = getCursorConversationMessages(context);
|
|
425
437
|
let index = messages.length - 1;
|
|
426
438
|
while (index >= 0 && messages[index]?.role === "user") {
|
|
@@ -430,15 +442,7 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
430
442
|
for (; index >= 0; index -= 1) {
|
|
431
443
|
const message = messages[index];
|
|
432
444
|
if (message.role !== "toolResult") break;
|
|
433
|
-
|
|
434
|
-
if (replayId) {
|
|
435
|
-
const replayRun = getUndisposed(replayId);
|
|
436
|
-
if (replayRun) return replayRun;
|
|
437
|
-
}
|
|
438
|
-
for (const run of pendingRuns.values()) {
|
|
439
|
-
if (run.disposed) continue;
|
|
440
|
-
if (run.bridgeRun?.hasPendingPiToolCallId(message.toolCallId)) return run;
|
|
441
|
-
}
|
|
445
|
+
if (matchesCursorLiveRunToolResult(run, message, getReplayId)) return run;
|
|
442
446
|
}
|
|
443
447
|
return undefined;
|
|
444
448
|
},
|
|
@@ -495,9 +499,15 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
495
499
|
const state = getPrivateState(run);
|
|
496
500
|
clearIdleDisposeTimer(run);
|
|
497
501
|
state.idleDisposeRequested = true;
|
|
498
|
-
if (state.leased || state.leaseQueue.length > 0
|
|
499
|
-
|
|
502
|
+
if (state.leased || state.leaseQueue.length > 0 ||
|
|
503
|
+
[run.bridgeRun, run.sessionBridgeRun].some((bridge) => bridge?.hasPendingToolCalls())) return;
|
|
500
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
|
+
}
|
|
501
511
|
void coordinator.release(run).catch(() => {
|
|
502
512
|
// Idle dispose must not leave release failures as unhandled rejections.
|
|
503
513
|
});
|
|
@@ -512,6 +522,12 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
512
522
|
if (run.disposed) return;
|
|
513
523
|
const abandoned = !isSuccessfulCursorLiveRun(run);
|
|
514
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 = [];
|
|
515
531
|
unregister(run);
|
|
516
532
|
clearIdleDisposeTimer(run);
|
|
517
533
|
state.idleDisposeRequested = false;
|
|
@@ -531,11 +547,13 @@ export function createCursorLiveRunCoordinator(deps: CursorLiveRunCoordinatorDep
|
|
|
531
547
|
}
|
|
532
548
|
if (abandoned) {
|
|
533
549
|
if (!run.done) {
|
|
550
|
+
const usageCompletion = run.onAbandon?.();
|
|
534
551
|
try {
|
|
535
552
|
await cancelCursorLiveSdkRun(run);
|
|
536
553
|
} catch {
|
|
537
554
|
// cancellation failure should not block session-agent abandonment
|
|
538
555
|
}
|
|
556
|
+
await usageCompletion;
|
|
539
557
|
}
|
|
540
558
|
await deps.abandonSessionAgent(run.sessionAgentScopeKey);
|
|
541
559
|
}
|
|
@@ -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 {
|
|
@@ -8,6 +8,7 @@ export interface NativeReplayRoutingInput {
|
|
|
8
8
|
toolName: string;
|
|
9
9
|
useNativeToolReplay: boolean;
|
|
10
10
|
activeToolNames?: ReadonlySet<string>;
|
|
11
|
+
registeredToolNames?: ReadonlySet<string>;
|
|
11
12
|
hasLiveRun: boolean;
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -20,7 +21,7 @@ export function isNativeToolActiveInContext(toolName: string, activeToolNames?:
|
|
|
20
21
|
* Extension resync (pi active tools) is separate; this uses context.tools snapshot only.
|
|
21
22
|
*/
|
|
22
23
|
export function resolveNativeReplayDisposition(input: NativeReplayRoutingInput): NativeReplayDisposition {
|
|
23
|
-
if (!input.useNativeToolReplay || !canRenderCursorToolNatively(input.toolName)) {
|
|
24
|
+
if (!input.useNativeToolReplay || !(input.registeredToolNames?.has(input.toolName) ?? canRenderCursorToolNatively(input.toolName))) {
|
|
24
25
|
return "transcript_trace";
|
|
25
26
|
}
|
|
26
27
|
if (isNativeToolActiveInContext(input.toolName, input.activeToolNames) && input.hasLiveRun) {
|
|
@@ -13,9 +13,9 @@ import {
|
|
|
13
13
|
isCursorNativeToolRegistrationRequested,
|
|
14
14
|
NATIVE_CURSOR_TOOL_DISPLAY_ENV,
|
|
15
15
|
readBooleanEnv,
|
|
16
|
-
|
|
16
|
+
getCursorNativeToolDisplayState,
|
|
17
|
+
registerCursorNativeToolDisplayState,
|
|
17
18
|
setCursorNativeToolDisplayRuntimeRequested,
|
|
18
|
-
skippedNativeToolNames,
|
|
19
19
|
} from "./cursor-native-tool-display-state.js";
|
|
20
20
|
import { isCursorReplayToolName } from "./cursor-tool-presentation-registry.js";
|
|
21
21
|
import { registerNativeCursorTool } from "./cursor-native-tool-display-tools.js";
|
|
@@ -30,7 +30,11 @@ function isCursorCorePiReplayToolName(toolName: string): toolName is (typeof CUR
|
|
|
30
30
|
type CursorNativeToolActivationApi = Pick<ExtensionAPI, "getActiveTools" | "setActiveTools">;
|
|
31
31
|
type CursorNativeToolRegistryApi = CursorNativeToolActivationApi & Pick<ExtensionAPI, "getAllTools" | "registerTool">;
|
|
32
32
|
|
|
33
|
-
export
|
|
33
|
+
export type CursorNativeToolDisplayExtensionApi = CursorNativeToolRegistryApi
|
|
34
|
+
& CursorModelLifecycleExtensionApi & Parameters<typeof registerCursorNativeToolDisplayState>[0];
|
|
35
|
+
|
|
36
|
+
// Pi filters getAllTools even after registration; new/reloaded extensions receive a new API.
|
|
37
|
+
const filteredRegistrations = new WeakMap<CursorNativeToolRegistryApi, Set<NativeCursorToolName>>();
|
|
34
38
|
|
|
35
39
|
function hasNonBuiltinTool(pi: Pick<ExtensionAPI, "getAllTools">, toolName: NativeCursorToolName): boolean {
|
|
36
40
|
const existingTool = pi.getAllTools().find((tool) => tool.name === toolName);
|
|
@@ -44,17 +48,29 @@ type NativeRegistrationContext = Pick<ExtensionContext, "mode" | "model"> & {
|
|
|
44
48
|
function registerNativeCursorToolsFromSet(
|
|
45
49
|
pi: CursorNativeToolRegistryApi,
|
|
46
50
|
toolNames: readonly NativeCursorToolName[],
|
|
51
|
+
getCwd: () => string,
|
|
47
52
|
): NativeCursorToolName[] {
|
|
53
|
+
const state = getCursorNativeToolDisplayState(pi);
|
|
54
|
+
const { registeredNativeToolSources, skippedNativeToolNames } = state;
|
|
55
|
+
let filteredToolNames = filteredRegistrations.get(pi);
|
|
56
|
+
if (!filteredToolNames) {
|
|
57
|
+
filteredToolNames = new Set();
|
|
58
|
+
filteredRegistrations.set(pi, filteredToolNames);
|
|
59
|
+
}
|
|
48
60
|
const newlySkippedToolNames: NativeCursorToolName[] = [];
|
|
49
61
|
for (const toolName of toolNames) {
|
|
50
|
-
if (
|
|
62
|
+
if (registeredNativeToolSources.has(toolName) || filteredToolNames.has(toolName)) continue;
|
|
51
63
|
if (hasNonBuiltinTool(pi, toolName)) {
|
|
52
|
-
skippedNativeToolNames.
|
|
53
|
-
|
|
64
|
+
if (!skippedNativeToolNames.has(toolName)) {
|
|
65
|
+
skippedNativeToolNames.add(toolName);
|
|
66
|
+
newlySkippedToolNames.push(toolName);
|
|
67
|
+
}
|
|
54
68
|
continue;
|
|
55
69
|
}
|
|
56
|
-
registerNativeCursorTool(pi, toolName);
|
|
57
|
-
|
|
70
|
+
registerNativeCursorTool(pi, toolName, getCwd, state);
|
|
71
|
+
const registeredTool = pi.getAllTools().find((tool) => tool.name === toolName);
|
|
72
|
+
if (registeredTool) registeredNativeToolSources.set(toolName, registeredTool.sourceInfo);
|
|
73
|
+
else filteredToolNames.add(toolName);
|
|
58
74
|
}
|
|
59
75
|
return newlySkippedToolNames;
|
|
60
76
|
}
|
|
@@ -67,15 +83,12 @@ function notifySkippedNativeCursorToolsIfNeeded(ctx: NativeRegistrationContext,
|
|
|
67
83
|
);
|
|
68
84
|
}
|
|
69
85
|
|
|
70
|
-
function hasAttemptedNativeCursorToolRegistration(): boolean {
|
|
71
|
-
return registeredNativeToolNames.size > 0 || skippedNativeToolNames.size > 0;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
86
|
function removeRegisteredNonCoreNativeCursorTools(pi: CursorNativeToolActivationApi): void {
|
|
75
|
-
|
|
87
|
+
const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
|
|
88
|
+
if (registeredNativeToolSources.size === 0) return;
|
|
76
89
|
const activeToolNames = new Set(pi.getActiveTools());
|
|
77
90
|
let changed = false;
|
|
78
|
-
for (const toolName of
|
|
91
|
+
for (const toolName of registeredNativeToolSources.keys()) {
|
|
79
92
|
if (isCursorCorePiReplayToolName(toolName)) continue;
|
|
80
93
|
if (!activeToolNames.delete(toolName)) continue;
|
|
81
94
|
changed = true;
|
|
@@ -87,7 +100,8 @@ export function syncRegisteredNativeCursorToolsForModel(
|
|
|
87
100
|
pi: CursorNativeToolActivationApi,
|
|
88
101
|
model: ExtensionContext["model"],
|
|
89
102
|
): void {
|
|
90
|
-
|
|
103
|
+
const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
|
|
104
|
+
if (registeredNativeToolSources.size === 0) return;
|
|
91
105
|
if (!isCursorModel(model)) {
|
|
92
106
|
removeRegisteredNonCoreNativeCursorTools(pi);
|
|
93
107
|
return;
|
|
@@ -95,7 +109,7 @@ export function syncRegisteredNativeCursorToolsForModel(
|
|
|
95
109
|
if (arePiToolsDisabled(pi)) return;
|
|
96
110
|
const activeToolNames = new Set(pi.getActiveTools());
|
|
97
111
|
let changed = false;
|
|
98
|
-
for (const toolName of
|
|
112
|
+
for (const toolName of registeredNativeToolSources.keys()) {
|
|
99
113
|
if (isCursorReplayToolName(toolName) && !CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES.some((activeReplayToolName) => activeReplayToolName === toolName)) continue;
|
|
100
114
|
if (activeToolNames.has(toolName)) continue;
|
|
101
115
|
activeToolNames.add(toolName);
|
|
@@ -104,31 +118,41 @@ export function syncRegisteredNativeCursorToolsForModel(
|
|
|
104
118
|
if (changed) pi.setActiveTools([...activeToolNames]);
|
|
105
119
|
}
|
|
106
120
|
|
|
107
|
-
function ensureNativeCursorToolsRegisteredForModel(pi: CursorNativeToolRegistryApi, ctx: NativeRegistrationContext): void {
|
|
108
|
-
if (!isCursorModel(ctx.model)
|
|
121
|
+
function ensureNativeCursorToolsRegisteredForModel(pi: CursorNativeToolRegistryApi, ctx: NativeRegistrationContext, getCwd: () => string): void {
|
|
122
|
+
if (!isCursorModel(ctx.model)) return;
|
|
109
123
|
|
|
110
124
|
const nonCoreToolNames = NATIVE_CURSOR_TOOL_NAMES.filter((toolName) => !isCursorCorePiReplayToolName(toolName));
|
|
111
125
|
const skippedToolNames = [
|
|
112
|
-
...registerNativeCursorToolsFromSet(pi, nonCoreToolNames),
|
|
113
|
-
...registerNativeCursorToolsFromSet(pi, CURSOR_CORE_PI_REPLAY_TOOL_NAMES),
|
|
126
|
+
...registerNativeCursorToolsFromSet(pi, nonCoreToolNames, getCwd),
|
|
127
|
+
...registerNativeCursorToolsFromSet(pi, CURSOR_CORE_PI_REPLAY_TOOL_NAMES, getCwd),
|
|
114
128
|
];
|
|
115
129
|
notifySkippedNativeCursorToolsIfNeeded(ctx, skippedToolNames);
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
function ensureThenSyncNativeCursorToolsForModel(pi: CursorNativeToolRegistryApi, ctx: NativeRegistrationContext): void {
|
|
132
|
+
function ensureThenSyncNativeCursorToolsForModel(pi: CursorNativeToolRegistryApi, ctx: NativeRegistrationContext, getCwd: () => string): void {
|
|
133
|
+
const { registeredNativeToolSources } = getCursorNativeToolDisplayState(pi);
|
|
134
|
+
const currentTools = pi.getAllTools();
|
|
135
|
+
for (const [toolName, sourceInfo] of registeredNativeToolSources) {
|
|
136
|
+
if (!currentTools.some((tool) => tool.name === toolName && tool.sourceInfo === sourceInfo)) {
|
|
137
|
+
registeredNativeToolSources.delete(toolName);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
119
140
|
const requested = isCursorNativeToolRegistrationRequested(ctx.mode);
|
|
120
|
-
setCursorNativeToolDisplayRuntimeRequested(requested);
|
|
141
|
+
setCursorNativeToolDisplayRuntimeRequested(requested, pi);
|
|
121
142
|
if (!requested) {
|
|
122
143
|
removeRegisteredNonCoreNativeCursorTools(pi);
|
|
123
144
|
return;
|
|
124
145
|
}
|
|
125
|
-
ensureNativeCursorToolsRegisteredForModel(pi, ctx);
|
|
146
|
+
ensureNativeCursorToolsRegisteredForModel(pi, ctx, getCwd);
|
|
126
147
|
syncRegisteredNativeCursorToolsForModel(pi, ctx.model);
|
|
127
148
|
}
|
|
128
149
|
|
|
129
150
|
export function registerCursorNativeToolDisplay(pi: CursorNativeToolDisplayExtensionApi): void {
|
|
151
|
+
registerCursorNativeToolDisplayState(pi);
|
|
152
|
+
let cwd = process.cwd();
|
|
130
153
|
registerCursorModelLifecycle(pi, (ctx) => {
|
|
131
|
-
|
|
154
|
+
cwd = ctx.cwd;
|
|
155
|
+
ensureThenSyncNativeCursorToolsForModel(pi, ctx, () => cwd);
|
|
132
156
|
});
|
|
133
157
|
}
|
|
134
158
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { ExtensionHandler, SessionShutdownEvent, SourceInfo } from "@earendil-works/pi-coding-agent";
|
|
1
2
|
import type { CursorPiToolDisplay } from "./cursor-transcript-utils.js";
|
|
2
3
|
import { parseOptionalEnvBoolean } from "./cursor-env-boolean.js";
|
|
4
|
+
import { normalizeCursorToolName } from "./cursor-tool-presentation-registry.js";
|
|
3
5
|
|
|
4
6
|
export interface CursorNativeToolDisplayItem extends CursorPiToolDisplay {
|
|
5
7
|
id: string;
|
|
@@ -9,11 +11,43 @@ export interface CursorNativeToolDisplayItem extends CursorPiToolDisplay {
|
|
|
9
11
|
export const NATIVE_CURSOR_TOOL_DISPLAY_ENV = "PI_CURSOR_NATIVE_TOOL_DISPLAY";
|
|
10
12
|
export const NATIVE_CURSOR_TOOL_REGISTRATION_ENV = "PI_CURSOR_REGISTER_NATIVE_TOOLS";
|
|
11
13
|
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
+
export interface CursorNativeToolDisplayState {
|
|
15
|
+
registeredNativeToolSources: Map<string, SourceInfo>;
|
|
16
|
+
skippedNativeToolNames: Set<string>;
|
|
17
|
+
runtimeRequested: boolean;
|
|
18
|
+
resultIds: Set<string>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function createDisplayState(): CursorNativeToolDisplayState {
|
|
22
|
+
return { registeredNativeToolSources: new Map(), skippedNativeToolNames: new Set(), runtimeRequested: false, resultIds: new Set() };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let lastDisplayState = createDisplayState();
|
|
26
|
+
const displayStates = new Map<object, CursorNativeToolDisplayState>();
|
|
27
|
+
// IDs index results; the owning display state and tool authorize consumption.
|
|
14
28
|
export const nativeToolResults = new Map<string, CursorNativeToolDisplayItem>();
|
|
29
|
+
const resultStates = new Map<string, CursorNativeToolDisplayState>();
|
|
15
30
|
|
|
16
|
-
|
|
31
|
+
export function getCursorNativeToolDisplayState(pi?: object): CursorNativeToolDisplayState {
|
|
32
|
+
if (!pi) return lastDisplayState;
|
|
33
|
+
const state = displayStates.get(pi);
|
|
34
|
+
if (!state) throw new Error("Cursor native display binding is no longer active.");
|
|
35
|
+
return state;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function registerCursorNativeToolDisplayState(pi: { on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): void }): void {
|
|
39
|
+
const state = createDisplayState();
|
|
40
|
+
displayStates.set(pi, state);
|
|
41
|
+
lastDisplayState = state;
|
|
42
|
+
pi.on("session_shutdown", () => {
|
|
43
|
+
displayStates.delete(pi);
|
|
44
|
+
for (const id of state.resultIds) {
|
|
45
|
+
nativeToolResults.delete(id);
|
|
46
|
+
resultStates.delete(id);
|
|
47
|
+
}
|
|
48
|
+
state.resultIds.clear();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
17
51
|
|
|
18
52
|
export function readBooleanEnv(name: string, env: Record<string, string | undefined> = process.env): boolean | undefined {
|
|
19
53
|
return parseOptionalEnvBoolean(env[name]);
|
|
@@ -30,39 +64,48 @@ export function isCursorNativeToolRegistrationRequested(mode?: string): boolean
|
|
|
30
64
|
return mode !== "print" && readBooleanEnv(NATIVE_CURSOR_TOOL_REGISTRATION_ENV) !== false && isCursorNativeToolDisplayRequested(mode);
|
|
31
65
|
}
|
|
32
66
|
|
|
33
|
-
export function setCursorNativeToolDisplayRuntimeRequested(requested: boolean): void {
|
|
34
|
-
|
|
67
|
+
export function setCursorNativeToolDisplayRuntimeRequested(requested: boolean, pi?: object): void {
|
|
68
|
+
getCursorNativeToolDisplayState(pi).runtimeRequested = requested;
|
|
35
69
|
}
|
|
36
70
|
|
|
37
71
|
export function isCursorNativeToolDisplayEnabled(): boolean {
|
|
38
|
-
return
|
|
72
|
+
return getCursorNativeToolDisplayState().registeredNativeToolSources.size > 0;
|
|
39
73
|
}
|
|
40
74
|
|
|
41
|
-
export function isCursorNativeToolDisplayRuntimeEnabled(): boolean {
|
|
42
|
-
return
|
|
75
|
+
export function isCursorNativeToolDisplayRuntimeEnabled(state = getCursorNativeToolDisplayState()): boolean {
|
|
76
|
+
return state.runtimeRequested && readBooleanEnv(NATIVE_CURSOR_TOOL_DISPLAY_ENV) !== false && state.registeredNativeToolSources.size > 0;
|
|
43
77
|
}
|
|
44
78
|
|
|
45
79
|
export function canRenderCursorToolNatively(toolName: string): boolean {
|
|
46
|
-
return
|
|
80
|
+
return getCursorNativeToolDisplayState().registeredNativeToolSources.has(toolName);
|
|
47
81
|
}
|
|
48
82
|
|
|
49
|
-
export function isRegisteredCursorNativeToolName(toolName: string): boolean {
|
|
50
|
-
return
|
|
83
|
+
export function isRegisteredCursorNativeToolName(toolName: string, pi?: object): boolean {
|
|
84
|
+
return (pi ? displayStates.get(pi) : lastDisplayState)?.registeredNativeToolSources.has(toolName) === true;
|
|
51
85
|
}
|
|
52
86
|
|
|
53
|
-
export function recordCursorNativeToolDisplay(item: CursorNativeToolDisplayItem): boolean {
|
|
54
|
-
if (!
|
|
87
|
+
export function recordCursorNativeToolDisplay(item: CursorNativeToolDisplayItem, state = getCursorNativeToolDisplayState()): boolean {
|
|
88
|
+
if (!state.registeredNativeToolSources.has(item.toolName)) return false;
|
|
55
89
|
nativeToolResults.set(item.id, item);
|
|
90
|
+
resultStates.set(item.id, state);
|
|
91
|
+
state.resultIds.add(item.id);
|
|
56
92
|
return true;
|
|
57
93
|
}
|
|
58
94
|
|
|
59
95
|
export function deleteCursorNativeToolDisplay(id: string): void {
|
|
60
96
|
nativeToolResults.delete(id);
|
|
97
|
+
resultStates.get(id)?.resultIds.delete(id);
|
|
98
|
+
resultStates.delete(id);
|
|
61
99
|
}
|
|
62
100
|
|
|
63
|
-
export function consumeCursorNativeToolDisplay(id: string): CursorNativeToolDisplayItem | undefined {
|
|
101
|
+
export function consumeCursorNativeToolDisplay(id: string, state: CursorNativeToolDisplayState, toolName: string): CursorNativeToolDisplayItem | undefined {
|
|
64
102
|
const item = nativeToolResults.get(id);
|
|
65
|
-
if (item)
|
|
103
|
+
if (item) {
|
|
104
|
+
if (resultStates.get(id) !== state || normalizeCursorToolName(item.toolName) !== normalizeCursorToolName(toolName)) {
|
|
105
|
+
throw new Error(`No owned Cursor ${toolName} result was available. This replay-only call does not execute work.`);
|
|
106
|
+
}
|
|
107
|
+
deleteCursorNativeToolDisplay(id);
|
|
108
|
+
}
|
|
66
109
|
return item;
|
|
67
110
|
}
|
|
68
111
|
|
|
@@ -76,14 +119,15 @@ export function isCursorFileMutationToolName(toolName: string): toolName is "edi
|
|
|
76
119
|
|
|
77
120
|
export const __testUtils = {
|
|
78
121
|
nativeToolResultCount: () => nativeToolResults.size,
|
|
79
|
-
registerNativeToolNameForTests(toolName: string): void {
|
|
80
|
-
|
|
81
|
-
|
|
122
|
+
registerNativeToolNameForTests(toolName: string, pi?: object): void {
|
|
123
|
+
const state = getCursorNativeToolDisplayState(pi);
|
|
124
|
+
state.runtimeRequested = true;
|
|
125
|
+
state.registeredNativeToolSources.set(toolName, { path: "test", source: "inline", scope: "temporary", origin: "top-level" });
|
|
82
126
|
},
|
|
83
127
|
reset(): void {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
skippedNativeToolNames.clear();
|
|
128
|
+
lastDisplayState = createDisplayState();
|
|
129
|
+
displayStates.clear();
|
|
87
130
|
nativeToolResults.clear();
|
|
131
|
+
resultStates.clear();
|
|
88
132
|
},
|
|
89
133
|
};
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
} from "@earendil-works/pi-coding-agent";
|
|
11
11
|
import { Text } from "@earendil-works/pi-tui";
|
|
12
12
|
import type { TSchema } from "typebox";
|
|
13
|
-
import { getCursorSessionCwd } from "./cursor-session-scope.js";
|
|
14
13
|
import {
|
|
15
14
|
BUILTIN_NATIVE_CURSOR_TOOL_NAMES,
|
|
16
15
|
CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES,
|
|
@@ -33,6 +32,7 @@ import {
|
|
|
33
32
|
import {
|
|
34
33
|
consumeCursorNativeToolDisplay,
|
|
35
34
|
isCursorReplayToolCallId,
|
|
35
|
+
type CursorNativeToolDisplayState,
|
|
36
36
|
} from "./cursor-native-tool-display-state.js";
|
|
37
37
|
|
|
38
38
|
|
|
@@ -155,12 +155,13 @@ function getNativeReplayStrategy(toolName: string): NativeReplayStrategy | undef
|
|
|
155
155
|
export function wrapNativeCursorTool<TParams extends TSchema, TDetails, TState>(
|
|
156
156
|
definition: ToolDefinition<TParams, TDetails, TState>,
|
|
157
157
|
getCurrentDefinition: () => ToolDefinition<TParams, TDetails, TState>,
|
|
158
|
+
state: CursorNativeToolDisplayState,
|
|
158
159
|
): ToolDefinition<TParams, TDetails, TState> {
|
|
159
160
|
const strategy = getNativeReplayStrategy(definition.name);
|
|
160
161
|
return {
|
|
161
162
|
...definition,
|
|
162
163
|
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
163
|
-
const cursorDisplay = consumeCursorNativeToolDisplay(toolCallId);
|
|
164
|
+
const cursorDisplay = consumeCursorNativeToolDisplay(toolCallId, state, definition.name);
|
|
164
165
|
if (cursorDisplay) {
|
|
165
166
|
if (cursorDisplay.isError) {
|
|
166
167
|
const text = cursorDisplay.result.content
|
|
@@ -211,9 +212,11 @@ export function createNativeCursorToolDefinition(toolName: NativeCursorToolName,
|
|
|
211
212
|
export function registerNativeCursorTool(
|
|
212
213
|
pi: Pick<import("@earendil-works/pi-coding-agent").ExtensionAPI, "registerTool">,
|
|
213
214
|
toolName: NativeCursorToolName,
|
|
215
|
+
getCwd: () => string,
|
|
216
|
+
state: CursorNativeToolDisplayState,
|
|
214
217
|
): void {
|
|
215
|
-
const definition = createNativeCursorToolDefinition(toolName,
|
|
216
|
-
pi.registerTool(wrapNativeCursorTool(definition, () => createNativeCursorToolDefinition(toolName,
|
|
218
|
+
const definition = createNativeCursorToolDefinition(toolName, getCwd());
|
|
219
|
+
pi.registerTool(wrapNativeCursorTool(definition, () => createNativeCursorToolDefinition(toolName, getCwd()), state));
|
|
217
220
|
}
|
|
218
221
|
|
|
219
222
|
export { CURSOR_MODEL_ACTIVE_REPLAY_TOOL_NAMES, CURSOR_REPLAY_TOOL_NAMES };
|
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
export const MCP_SERVER_NAME = "pi_tools";
|
|
2
2
|
export const MCP_ENDPOINT_ROOT = "/cursor-pi-tool-bridge";
|
|
3
|
+
export const CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH = 64;
|
|
3
4
|
|
|
4
|
-
const
|
|
5
|
+
const CURSOR_PI_BRIDGE_RUN_UUID_PATTERN = /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i;
|
|
6
|
+
const CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN = /^cursor-pi-bridge-[0-9a-f]{32}-t\d+$/i;
|
|
7
|
+
const LEGACY_CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN =
|
|
8
|
+
/^cursor-pi-bridge-run-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}-tool-\d+$/i;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Build the provider-facing bridge ID while enforcing the 64-character
|
|
12
|
+
* call_id limit used by OpenAI-compatible Responses backends.
|
|
13
|
+
*/
|
|
14
|
+
export function buildCursorPiBridgeToolCallId(runUuid: string, counter: number): string {
|
|
15
|
+
if (!CURSOR_PI_BRIDGE_RUN_UUID_PATTERN.test(runUuid)) {
|
|
16
|
+
throw new Error("Cursor pi bridge run UUID must be canonical");
|
|
17
|
+
}
|
|
18
|
+
if (!Number.isSafeInteger(counter) || counter <= 0) {
|
|
19
|
+
throw new Error("Cursor pi bridge tool call counter must be a positive safe integer");
|
|
20
|
+
}
|
|
21
|
+
const toolCallId = `cursor-pi-bridge-${runUuid.replaceAll("-", "")}-t${counter}`;
|
|
22
|
+
if (toolCallId.length > CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH) {
|
|
23
|
+
throw new Error("Cursor pi bridge tool call ID limit exceeded");
|
|
24
|
+
}
|
|
25
|
+
return toolCallId;
|
|
26
|
+
}
|
|
5
27
|
|
|
6
28
|
export function isCursorPiBridgeToolCallId(toolCallId: string): boolean {
|
|
7
|
-
return
|
|
29
|
+
return (
|
|
30
|
+
(toolCallId.length <= CURSOR_PI_BRIDGE_TOOL_CALL_ID_MAX_LENGTH && CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId)) ||
|
|
31
|
+
LEGACY_CURSOR_PI_BRIDGE_TOOL_CALL_ID_PATTERN.test(toolCallId)
|
|
32
|
+
);
|
|
8
33
|
}
|
|
@@ -7,7 +7,11 @@ import {
|
|
|
7
7
|
WebStandardStreamableHTTPServerTransport,
|
|
8
8
|
} from "@modelcontextprotocol/server";
|
|
9
9
|
import { bridgeToolExecutionAbortTracker } from "./cursor-pi-tool-bridge-abort.js";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
buildCursorPiBridgeToolCallId,
|
|
12
|
+
MCP_ENDPOINT_ROOT,
|
|
13
|
+
MCP_SERVER_NAME,
|
|
14
|
+
} from "./cursor-pi-tool-bridge-constants.js";
|
|
11
15
|
import {
|
|
12
16
|
type CursorPiToolBridgeDiagnosticEvent,
|
|
13
17
|
type CursorPiToolBridgeLifecycleDiagnosticFields,
|
|
@@ -58,10 +62,12 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
58
62
|
private readonly registry: CursorPiToolBridgeRunHost;
|
|
59
63
|
private readonly env: Record<string, string | undefined>;
|
|
60
64
|
private readonly endpointPath: string;
|
|
65
|
+
private readonly runUuid: string;
|
|
61
66
|
private readonly callTimeoutMs: number;
|
|
62
67
|
private readonly knownMcpToolNames: ReadonlySet<string>;
|
|
63
68
|
private readonly knownCursorMcpCallIds = new Set<string>();
|
|
64
69
|
private readonly queuedRequests: CursorPiBridgeToolRequest[] = [];
|
|
70
|
+
private readonly pendingToolCallListeners = new Set<() => void>();
|
|
65
71
|
private readonly pendingByPiToolCallId = new Map<string, PendingBridgeCall>();
|
|
66
72
|
private readonly pendingByBridgeCallId = new Map<string, PendingBridgeCall>();
|
|
67
73
|
private readonly pendingByCursorMcpCallId = new Map<string, PendingBridgeCall>();
|
|
@@ -86,7 +92,9 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
86
92
|
this.enabled = enabled;
|
|
87
93
|
this.onToolRequest = options.onToolRequest;
|
|
88
94
|
this.debugRecorder = options.debugRecorder;
|
|
89
|
-
|
|
95
|
+
const runUuid = randomUUID();
|
|
96
|
+
this.runUuid = runUuid;
|
|
97
|
+
this.id = `cursor-pi-bridge-run-${runUuid}`;
|
|
90
98
|
this.endpointPath = `${MCP_ENDPOINT_ROOT}/${randomUUID()}/mcp`;
|
|
91
99
|
this.callTimeoutMs = resolveCursorPiToolBridgeCallTimeoutMs(env);
|
|
92
100
|
this.knownMcpToolNames = new Set(snapshot.tools.map((tool) => tool.mcpToolName));
|
|
@@ -183,6 +191,23 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
183
191
|
return this.pendingByPiToolCallId.has(piToolCallId);
|
|
184
192
|
}
|
|
185
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
|
+
|
|
186
211
|
cancelPendingPiToolCallId(piToolCallId: string, reason: string): boolean {
|
|
187
212
|
const pending = this.pendingByPiToolCallId.get(piToolCallId);
|
|
188
213
|
if (!pending) return false;
|
|
@@ -227,6 +252,7 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
227
252
|
if (this.disposed) return;
|
|
228
253
|
this.disposed = true;
|
|
229
254
|
this.cancel("Cursor pi tool bridge run disposed");
|
|
255
|
+
this.pendingToolCallListeners.clear();
|
|
230
256
|
await waitForProtocolFlush();
|
|
231
257
|
await Promise.allSettled([
|
|
232
258
|
this.mcpTransport?.close(),
|
|
@@ -277,11 +303,12 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
277
303
|
|
|
278
304
|
this.toolCallCounter += 1;
|
|
279
305
|
const bridgeCallId = `${this.id}-bridge-${this.toolCallCounter}`;
|
|
306
|
+
const piToolCallId = buildCursorPiBridgeToolCallId(this.runUuid, this.toolCallCounter);
|
|
280
307
|
const request: CursorPiBridgeToolRequest = {
|
|
281
308
|
runId: this.id,
|
|
282
309
|
bridgeCallId,
|
|
283
310
|
cursorMcpCallId,
|
|
284
|
-
piToolCallId
|
|
311
|
+
piToolCallId,
|
|
285
312
|
piToolName,
|
|
286
313
|
mcpToolName,
|
|
287
314
|
args: normalizeMcpArgs(argsValue),
|
|
@@ -307,6 +334,7 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
307
334
|
this.pendingByBridgeCallId.set(request.bridgeCallId, pending);
|
|
308
335
|
this.pendingByCursorMcpCallId.set(cursorMcpCallId, pending);
|
|
309
336
|
this.knownCursorMcpCallIds.add(cursorMcpCallId);
|
|
337
|
+
this.notifyPendingToolCallsChanged();
|
|
310
338
|
pending.timeout = setTimeout(() => {
|
|
311
339
|
const reason = `Cursor pi bridge CallTool timed out after ${this.callTimeoutMs} ms`;
|
|
312
340
|
this.rejectAndAbortPending(pending, new Error(reason));
|
|
@@ -430,5 +458,6 @@ export class CursorPiToolBridgeRunImpl implements CursorPiToolBridgeRun {
|
|
|
430
458
|
if (pending.request.cursorMcpCallId) this.pendingByCursorMcpCallId.delete(pending.request.cursorMcpCallId);
|
|
431
459
|
const queuedIndex = this.queuedRequests.findIndex((request) => request.bridgeCallId === pending.request.bridgeCallId);
|
|
432
460
|
if (queuedIndex >= 0) this.queuedRequests.splice(queuedIndex, 1);
|
|
461
|
+
this.notifyPendingToolCallsChanged();
|
|
433
462
|
}
|
|
434
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();
|
|
@@ -63,7 +63,7 @@ export function buildCursorPiToolBridgeSnapshot(
|
|
|
63
63
|
|
|
64
64
|
for (const tool of allTools) {
|
|
65
65
|
if (!activeToolNames.has(tool.name)) continue;
|
|
66
|
-
if (isExcludedFromCursorBridgeExposure(tool.name) && isRegisteredCursorNativeToolName(tool.name)) continue;
|
|
66
|
+
if (isExcludedFromCursorBridgeExposure(tool.name) && isRegisteredCursorNativeToolName(tool.name, pi)) continue;
|
|
67
67
|
if (!exposeOverlappingBuiltins && isOverlappingCursorNativePiToolName(tool.name)) continue;
|
|
68
68
|
|
|
69
69
|
const mcpToolName = createMcpToolName(tool.name, usedMcpToolNames);
|