pi-cursor-sdk 0.5.0 → 0.5.3
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 +76 -0
- package/README.md +135 -34
- package/dist/context.js +55 -36
- package/dist/cursor-api-key.js +34 -19
- package/dist/cursor-cloud-options.js +1 -0
- package/dist/cursor-config.js +59 -0
- package/dist/cursor-custom-store-path.js +177 -0
- package/dist/cursor-custom-subagent-definitions.js +14 -0
- package/dist/cursor-fallback-models.generated.js +402 -1
- package/dist/cursor-fallback-warning.js +8 -2
- package/dist/cursor-live-run-coordinator.js +22 -2
- package/dist/cursor-local-agent-ownership.js +17 -0
- package/dist/cursor-mcp-timeout-override.js +3 -1
- package/dist/cursor-pi-tool-bridge-diagnostics.js +4 -0
- package/dist/cursor-pi-tool-bridge-run.js +31 -3
- package/dist/cursor-pi-tool-bridge-server.js +1 -1
- package/dist/cursor-provider-binding.js +70 -10
- package/dist/cursor-provider-errors.js +33 -26
- package/dist/cursor-provider-live-run-drain.js +10 -4
- package/dist/cursor-provider-run-finalizer.js +2 -1
- package/dist/cursor-provider-turn-prepare.js +25 -9
- package/dist/cursor-provider-turn-summary.js +1 -1
- package/dist/cursor-provider-turn-tool-ledger.js +13 -7
- package/dist/cursor-provider.js +2 -1
- package/dist/cursor-question-tool.js +5 -5
- package/dist/cursor-request-provenance.js +13 -2
- package/dist/cursor-sdk-output-filter.js +1 -1
- package/dist/cursor-sdk-process-error-guard.js +1 -3
- package/dist/cursor-sdk-runtime.js +13 -14
- package/dist/cursor-sdk-vendor-env.js +20 -0
- package/dist/cursor-session-agent-cleanup.js +38 -26
- package/dist/cursor-session-agent-lifecycle.js +2 -2
- package/dist/cursor-session-agent-lineage.js +11 -7
- package/dist/cursor-session-agent-resume.js +15 -9
- package/dist/cursor-session-agent.js +60 -23
- package/dist/cursor-session-scope.js +27 -14
- package/dist/cursor-session-send-policy.js +2 -2
- package/dist/cursor-session-settings.js +3 -3
- package/dist/cursor-session-store.js +235 -45
- package/dist/cursor-state.js +23 -9
- package/dist/cursor-tool-manifest.js +1 -1
- package/dist/index.js +21 -19
- package/dist/model-discovery.js +58 -26
- package/dist/model-list-cache.js +12 -1
- package/docs/cursor-live-smoke-checklist.md +2 -2
- package/docs/cursor-model-ux-spec.md +83 -30
- package/docs/cursor-native-tool-replay.md +16 -5
- package/docs/cursor-native-tool-visual-audit.md +1 -1
- package/docs/cursor-testing-lessons.md +63 -7
- package/docs/cursor-tool-surfaces.md +19 -4
- 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 +20 -18
- package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
- package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
- package/scripts/platform-smoke/artifacts.mjs +7 -1
- package/shared/cursor-sdk-output-filter.d.mts +3 -0
- package/shared/cursor-sdk-output-filter.mjs +117 -44
- package/src/context.ts +59 -35
- package/src/cursor-api-key.ts +37 -17
- package/src/cursor-cloud-options.ts +2 -0
- package/src/cursor-config.ts +76 -0
- package/src/cursor-custom-store-path.ts +151 -0
- package/src/cursor-custom-subagent-definitions.ts +21 -0
- package/src/cursor-fallback-models.generated.ts +402 -1
- package/src/cursor-fallback-warning.ts +7 -3
- package/src/cursor-live-run-coordinator.ts +21 -2
- package/src/cursor-local-agent-ownership.ts +18 -0
- package/src/cursor-mcp-timeout-override.ts +3 -1
- package/src/cursor-pi-tool-bridge-diagnostics.ts +17 -0
- package/src/cursor-pi-tool-bridge-run.ts +31 -3
- package/src/cursor-pi-tool-bridge-server.ts +1 -2
- package/src/cursor-pi-tool-bridge-types.ts +3 -0
- package/src/cursor-provider-binding.ts +70 -11
- package/src/cursor-provider-errors.ts +32 -28
- package/src/cursor-provider-live-run-drain.ts +9 -4
- package/src/cursor-provider-run-finalizer.ts +2 -1
- package/src/cursor-provider-turn-prepare.ts +28 -13
- package/src/cursor-provider-turn-summary.ts +1 -1
- package/src/cursor-provider-turn-tool-ledger.ts +12 -7
- package/src/cursor-provider.ts +3 -1
- package/src/cursor-question-tool.ts +5 -5
- package/src/cursor-request-provenance.ts +18 -3
- package/src/cursor-sdk-output-filter.ts +2 -0
- package/src/cursor-sdk-process-error-guard.ts +1 -2
- package/src/cursor-sdk-runtime.ts +14 -15
- package/src/cursor-sdk-vendor-env.ts +22 -0
- package/src/cursor-session-agent-cleanup.ts +33 -27
- package/src/cursor-session-agent-lifecycle.ts +2 -2
- package/src/cursor-session-agent-lineage.ts +10 -5
- package/src/cursor-session-agent-resume.ts +14 -7
- package/src/cursor-session-agent.ts +67 -24
- package/src/cursor-session-scope.ts +33 -11
- package/src/cursor-session-send-policy.ts +2 -2
- package/src/cursor-session-settings.ts +3 -3
- package/src/cursor-session-store.ts +259 -53
- package/src/cursor-state.ts +32 -7
- package/src/cursor-tool-manifest.ts +1 -1
- package/src/index.ts +19 -19
- package/src/model-discovery.ts +68 -30
- 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
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { ExtensionAPI,
|
|
2
|
-
import {
|
|
1
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { Model, Provider } from "@earendil-works/pi-ai";
|
|
3
|
+
import { cursorApiKeyAuth, normalizeCursorApiKey, resolveCursorCredentialApiKey } from "./cursor-api-key.js";
|
|
4
|
+
import { discoverModels, type CursorModelFallbackIssue } from "./model-discovery.js";
|
|
5
|
+
import { clearModelListCache } from "./model-list-cache.js";
|
|
3
6
|
import { captureCursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
|
|
4
7
|
import { captureCursorUsageRecorder, type CursorUsageRecorder } from "./cursor-usage-ledger.js";
|
|
5
8
|
import { getCursorNativeToolDisplayState } from "./cursor-native-tool-display-state.js";
|
|
@@ -7,24 +10,30 @@ import { getRegisteredCursorPiToolBridge } from "./cursor-pi-tool-bridge.js";
|
|
|
7
10
|
import { createCursorLazyStream } from "./cursor-provider-lazy.js";
|
|
8
11
|
import { getCursorSessionScopeSnapshot } from "./cursor-session-scope.js";
|
|
9
12
|
import { captureCursorRequestProjection, resolveCursorRequestProvenance, type CursorRequestProjectionSnapshot, type CursorRequestProvenance } from "./cursor-request-provenance.js";
|
|
13
|
+
import type { CursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
|
|
10
14
|
|
|
11
|
-
export const CURSOR_PROVIDER_OWNERSHIP_ERROR = "Cursor provider ownership is unavailable: this request does not belong to the active Cursor registration.
|
|
15
|
+
export const CURSOR_PROVIDER_OWNERSHIP_ERROR = "Cursor provider ownership is unavailable: this request does not belong to the active Cursor registration. Reload this session's extensions to restore its Cursor registration; use independent ModelRuntime instances for sibling sessions.";
|
|
12
16
|
interface ProviderBinding { active: boolean; closed: boolean }
|
|
13
17
|
interface RequestReceipt {
|
|
14
18
|
binding: ProviderBinding;
|
|
15
19
|
scope: ReturnType<typeof getCursorSessionScopeSnapshot>;
|
|
16
20
|
projection: CursorRequestProjectionSnapshot;
|
|
17
21
|
usageRecorder: CursorUsageRecorder;
|
|
22
|
+
reportSdkNotice: CursorSdkOutputNoticeHandler;
|
|
18
23
|
}
|
|
19
24
|
const requestOwners = new WeakMap<object, RequestReceipt>();
|
|
20
25
|
|
|
21
26
|
/** One closure per ExtensionAPI, including direct compaction/tree/bug-report streams. */
|
|
22
|
-
export function registerCursorProviderBinding(
|
|
27
|
+
export function registerCursorProviderBinding(
|
|
28
|
+
pi: Pick<ExtensionAPI, "on" | "registerProvider" | "appendEntry">,
|
|
29
|
+
) {
|
|
23
30
|
const binding: ProviderBinding = { active: false, closed: false };
|
|
31
|
+
let registry: ExtensionContext["modelRegistry"] | undefined;
|
|
24
32
|
const operations = new WeakMap<AbortSignal, CursorRequestProvenance["purpose"]>();
|
|
25
33
|
pi.on("session_before_compact", (event) => { operations.set(event.signal, "compaction"); });
|
|
26
34
|
pi.on("session_before_tree", (event) => { operations.set(event.signal, "tree"); });
|
|
27
35
|
pi.on("before_provider_headers", (event, ctx) => {
|
|
36
|
+
const notices = new Set<string>();
|
|
28
37
|
// Pi's SDK supplies this session-owned callback for ordinary and auxiliary
|
|
29
38
|
// streams. ModelRuntime forwards the same real headers object to the provider.
|
|
30
39
|
requestOwners.set(event.headers, {
|
|
@@ -32,6 +41,14 @@ export function registerCursorProviderBinding(pi: Pick<ExtensionAPI, "on" | "reg
|
|
|
32
41
|
scope: getCursorSessionScopeSnapshot(pi),
|
|
33
42
|
projection: captureCursorRequestProjection(ctx.sessionManager),
|
|
34
43
|
usageRecorder: captureCursorUsageRecorder(pi, ctx),
|
|
44
|
+
reportSdkNotice: (kind, message) => {
|
|
45
|
+
if (!binding.active || binding.closed) return false;
|
|
46
|
+
if (notices.has(kind)) return;
|
|
47
|
+
pi.appendEntry("pi-cursor-sdk:capability-notice", { kind, message });
|
|
48
|
+
if (ctx.hasUI) ctx.ui.notify(message, "warning");
|
|
49
|
+
else console.warn(message);
|
|
50
|
+
notices.add(kind);
|
|
51
|
+
},
|
|
35
52
|
});
|
|
36
53
|
});
|
|
37
54
|
const stream = createCursorLazyStream((model, context, options) => {
|
|
@@ -48,15 +65,57 @@ export function registerCursorProviderBinding(pi: Pick<ExtensionAPI, "on" | "reg
|
|
|
48
65
|
bridge: getRegisteredCursorPiToolBridge(pi),
|
|
49
66
|
nativeDisplay: getCursorNativeToolDisplayState(pi),
|
|
50
67
|
recordCloudLifecycle: captureCursorCloudLifecycleRecorder(pi),
|
|
68
|
+
reportSdkNotice: owner.reportSdkNotice,
|
|
51
69
|
};
|
|
52
70
|
});
|
|
53
|
-
pi.on("session_start", () => {
|
|
54
|
-
pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; });
|
|
55
|
-
return (models: ProviderModelConfig[]) => {
|
|
71
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
56
72
|
if (binding.closed) return;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
binding.active = true;
|
|
74
|
+
registry = ctx.modelRegistry;
|
|
75
|
+
// The genuine extension context supplies composed config auth; startup
|
|
76
|
+
// selection already has the known baseline, without reading a default store.
|
|
77
|
+
await registry.refresh({ providers: ["cursor"], allowNetwork: false });
|
|
78
|
+
});
|
|
79
|
+
pi.on("session_shutdown", () => { binding.active = false; binding.closed = true; registry = undefined; });
|
|
80
|
+
return (models: Awaited<ReturnType<typeof discoverModels>>, onCatalog: (issue?: CursorModelFallbackIssue) => void) => {
|
|
81
|
+
if (binding.closed) return;
|
|
82
|
+
const toNative = (definitions: typeof models): Model<"cursor-sdk">[] =>
|
|
83
|
+
definitions.map(({ compat: _compat, ...definition }) => ({
|
|
84
|
+
...definition, provider: "cursor", api: "cursor-sdk", baseUrl: "https://cursor.com",
|
|
85
|
+
}));
|
|
86
|
+
let current = toNative(models);
|
|
87
|
+
const provider: Provider<"cursor-sdk"> = {
|
|
88
|
+
id: "cursor", name: "Cursor", baseUrl: "https://cursor.com",
|
|
89
|
+
auth: { apiKey: cursorApiKeyAuth() },
|
|
90
|
+
getModels: () => current,
|
|
91
|
+
stream: stream,
|
|
92
|
+
streamSimple: stream,
|
|
93
|
+
async refreshModels(context) {
|
|
94
|
+
if (binding.closed) return;
|
|
95
|
+
const resolved = await registry?.getProviderAuth("cursor");
|
|
96
|
+
context.signal.throwIfAborted();
|
|
97
|
+
const credential = context.credential;
|
|
98
|
+
const apiKey = registry
|
|
99
|
+
? normalizeCursorApiKey(resolved?.auth.apiKey)
|
|
100
|
+
: credential && credential.type !== "api_key" ? undefined
|
|
101
|
+
: await resolveCursorCredentialApiKey(credential, async () => process.env.CURSOR_API_KEY);
|
|
102
|
+
let issue: CursorModelFallbackIssue | undefined;
|
|
103
|
+
await discoverModels({
|
|
104
|
+
apiKey, allowNetwork: context.allowNetwork, forceRefresh: context.force, signal: context.signal,
|
|
105
|
+
onFallback: (next) => { issue = next; },
|
|
106
|
+
publish: (definitions, update) => context.publish({
|
|
107
|
+
update: () => {
|
|
108
|
+
if (binding.closed) return;
|
|
109
|
+
update();
|
|
110
|
+
current = toNative(definitions);
|
|
111
|
+
// Do not infer logout before native composed auth is reachable.
|
|
112
|
+
if (registry && !apiKey) clearModelListCache();
|
|
113
|
+
onCatalog(issue);
|
|
114
|
+
},
|
|
115
|
+
}),
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
pi.registerProvider(provider);
|
|
61
120
|
};
|
|
62
121
|
}
|
|
@@ -143,7 +143,10 @@ function collectConnectErrorStacks(error: unknown, record: Record<string, unknow
|
|
|
143
143
|
|
|
144
144
|
function isConnectError(error: unknown, record: Record<string, unknown> | undefined): boolean {
|
|
145
145
|
const name = error instanceof Error ? error.name : getErrorStringField(record, "name");
|
|
146
|
-
|
|
146
|
+
if (name === "ConnectError") return true;
|
|
147
|
+
// @cursor/sdk convertConnectError re-wraps backend ConnectErrors (name -> NetworkError,
|
|
148
|
+
// code -> "unavailable") and leaves the original ConnectError on `.cause` without outer details.
|
|
149
|
+
return getErrorStringField(asRecord(record?.cause), "name") === "ConnectError";
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
function isUnauthenticatedConnectCode(code: unknown): boolean {
|
|
@@ -160,13 +163,12 @@ function isCursorSdkStallAbortNetworkError(code: unknown, evidence: string, stac
|
|
|
160
163
|
/(?:operation was aborted|canceled)/i.test(evidence) &&
|
|
161
164
|
/(?:AbortError|operation was aborted)/i.test(`${evidence}\n${stackEvidence}`) &&
|
|
162
165
|
stackEvidence.includes("@cursor/sdk") &&
|
|
163
|
-
stackEvidence.includes("@connectrpc/connect-node") &&
|
|
164
166
|
/\b(?:onStall|reportStall|StallDetected)\b/i.test(stackEvidence)
|
|
165
167
|
);
|
|
166
168
|
}
|
|
167
169
|
|
|
168
170
|
/**
|
|
169
|
-
* @cursor/sdk@1.0.
|
|
171
|
+
* @cursor/sdk@1.0.37 throws internal RetriableError (name/kind "RetriableError") with message
|
|
170
172
|
* "Connection stalled" or "Connection stalled repeatedly" after fetchWithRetry exhausts stalls.
|
|
171
173
|
* The ConnectError is only the cause; the top-level error is not a ConnectError.
|
|
172
174
|
*/
|
|
@@ -181,30 +183,26 @@ export function isCursorSdkConnectionStalledError(error: unknown): boolean {
|
|
|
181
183
|
return /(?:^|[\\/])node_modules[\\/]@cursor[\\/]sdk[\\/]dist[\\/]/.test(stack) || stack.includes("@cursor/sdk");
|
|
182
184
|
}
|
|
183
185
|
|
|
184
|
-
function isCursorExtensionConnectStack(stack: string): boolean {
|
|
185
|
-
// pi runs Cursor SDK in Node, where the SDK dynamically imports connect-node.
|
|
186
|
-
// connect-web is the SDK's Bun/Deno path and is intentionally not classified for supported pi runs.
|
|
187
|
-
return stack.includes("@connectrpc/connect-node") && /(?:^|[\\/])pi-cursor-sdk(?:[\\/]|$)/.test(stack);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
186
|
function getCursorConnectSource(error: unknown, record: Record<string, unknown> | undefined): CursorConnectErrorSource {
|
|
191
|
-
const stack =
|
|
187
|
+
const stack = collectConnectErrorStacks(error, record);
|
|
188
|
+
// Node/Bun use the SDK's vendored transport; Deno uses connect-web.
|
|
192
189
|
if (stack.includes("@cursor/sdk")) return "cursor-sdk-stack";
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
190
|
+
let current = record;
|
|
191
|
+
for (let depth = 0; depth < 3 && current; depth += 1) {
|
|
192
|
+
const details = Array.isArray(current.details) ? current.details : [];
|
|
193
|
+
const hasCursorBackendDetails = details.some((detail) => {
|
|
194
|
+
const type = getErrorStringField(asRecord(detail), "type");
|
|
195
|
+
return typeof type === "string" && type.startsWith("aiserver.");
|
|
196
|
+
});
|
|
197
|
+
if (hasCursorBackendDetails) return "cursor-backend-details";
|
|
198
|
+
current = asRecord(current.cause);
|
|
199
|
+
}
|
|
200
|
+
return "generic-connect";
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
export type CursorConnectErrorSource =
|
|
204
204
|
| "cursor-sdk-stack"
|
|
205
|
-
| "cursor-extension-connect-stack"
|
|
206
205
|
| "cursor-backend-details"
|
|
207
|
-
| "connect-node-stack"
|
|
208
206
|
| "generic-connect";
|
|
209
207
|
|
|
210
208
|
export type CursorConnectErrorClassification =
|
|
@@ -225,20 +223,26 @@ export function classifyCursorConnectError(error: unknown): CursorConnectErrorCl
|
|
|
225
223
|
const evidence = collectConnectErrorEvidence(error, record);
|
|
226
224
|
const stackEvidence = collectConnectErrorStacks(error, record);
|
|
227
225
|
|
|
226
|
+
if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
|
|
227
|
+
return { kind: "network", source: getCursorConnectSource(error, record) };
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const directAbort = (code === 1 || code === "canceled") &&
|
|
231
|
+
(causeName === "AbortError" || /AbortError/.test(stack));
|
|
232
|
+
// The vendored SDK transport can wrap a canceled ConnectError as Unknown.
|
|
233
|
+
// Require the observed canceled -> AbortError cause chain, not generic text.
|
|
234
|
+
const wrappedAbort = (code === 2 || code === "unknown") &&
|
|
235
|
+
causeName === "ConnectError" &&
|
|
236
|
+
(cause?.code === 1 || cause?.code === "canceled") &&
|
|
237
|
+
asRecord(cause?.cause)?.name === "AbortError";
|
|
228
238
|
if (
|
|
229
|
-
(
|
|
239
|
+
(directAbort || wrappedAbort) &&
|
|
230
240
|
Boolean(rawMessage && /(?:operation was aborted|canceled)/i.test(rawMessage)) &&
|
|
231
|
-
(
|
|
232
|
-
stack.includes("@cursor/sdk") &&
|
|
233
|
-
stack.includes("@connectrpc/connect-node")
|
|
241
|
+
stack.includes("@cursor/sdk")
|
|
234
242
|
) {
|
|
235
243
|
return { kind: "abort", source: "cursor-sdk-stack" };
|
|
236
244
|
}
|
|
237
245
|
|
|
238
|
-
if (isCursorSdkStallAbortNetworkError(code, evidence, stackEvidence)) {
|
|
239
|
-
return { kind: "network", source: getCursorConnectSource(error, record) };
|
|
240
|
-
}
|
|
241
|
-
|
|
242
246
|
if (isUnauthenticatedConnectCode(code) || isLikelyAuthError(evidence)) {
|
|
243
247
|
return { kind: "unauthenticated", source: getCursorConnectSource(error, record) };
|
|
244
248
|
}
|
|
@@ -30,13 +30,18 @@ import { partitionNativeToolsByActiveContext } from "./cursor-native-replay-rout
|
|
|
30
30
|
import type { CursorSdkEventDebugRecorder } from "./cursor-sdk-event-debug.js";
|
|
31
31
|
|
|
32
32
|
export const DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS = 5 * 60 * 1000;
|
|
33
|
+
function parseCursorNativeReplayIdleDisposeMs(raw: string | undefined): number {
|
|
34
|
+
if (!raw || /[^0-9]/.test(raw)) return DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
|
|
35
|
+
const value = Number(raw);
|
|
36
|
+
return value >= 1 && value <= 2147483647 ? value : DEFAULT_CURSOR_NATIVE_REPLAY_IDLE_DISPOSE_MS;
|
|
37
|
+
}
|
|
33
38
|
const CURSOR_NATIVE_REPLAY_TOOL_ID_PATTERN = /^(cursor-replay-\d+-\d+)-tool-\d+$/;
|
|
34
39
|
|
|
35
40
|
interface CursorLiveTurnState {
|
|
36
41
|
emitter: CursorPartialContentEmitter;
|
|
37
42
|
emittedText: string;
|
|
38
43
|
}
|
|
39
|
-
let
|
|
44
|
+
let cursorNativeReplayIdleDisposeMsOverride: number | undefined;
|
|
40
45
|
|
|
41
46
|
type CursorLiveRunDrainMode = "emit" | "chain_user_input";
|
|
42
47
|
type CursorLiveRunDrainOutcome = "tool_use" | "stop" | "error" | "aborted" | "chain_user_input";
|
|
@@ -50,7 +55,7 @@ export async function abandonSessionCursorAgent(scopeKey: string | undefined): P
|
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
export const cursorLiveRuns = createCursorLiveRunCoordinator({
|
|
53
|
-
getIdleDisposeMs: () =>
|
|
58
|
+
getIdleDisposeMs: () => cursorNativeReplayIdleDisposeMsOverride ?? parseCursorNativeReplayIdleDisposeMs(process.env.PI_CURSOR_LIVE_RUN_IDLE_DISPOSE_MS),
|
|
54
59
|
deleteNativeToolDisplay: deleteCursorNativeToolDisplay,
|
|
55
60
|
abandonSessionAgent: (scopeKey) => abandonSessionCursorAgent(scopeKey),
|
|
56
61
|
});
|
|
@@ -497,11 +502,11 @@ export async function drainExistingCursorLiveRunBeforeSend(
|
|
|
497
502
|
}
|
|
498
503
|
|
|
499
504
|
export function setCursorNativeReplayIdleDisposeMs(value: number): void {
|
|
500
|
-
|
|
505
|
+
cursorNativeReplayIdleDisposeMsOverride = value;
|
|
501
506
|
}
|
|
502
507
|
|
|
503
508
|
export function resetCursorNativeReplayIdleDisposeMs(): void {
|
|
504
|
-
|
|
509
|
+
cursorNativeReplayIdleDisposeMsOverride = undefined;
|
|
505
510
|
}
|
|
506
511
|
|
|
507
512
|
export async function releaseAllPendingCursorLiveRunsForTests(): Promise<void> {
|
|
@@ -145,12 +145,12 @@ export class CursorRunFinalizer {
|
|
|
145
145
|
sendResult: CursorProviderTurnSendResult | undefined,
|
|
146
146
|
liveCompletion: CursorLiveRunCompletion | undefined,
|
|
147
147
|
): Promise<void> {
|
|
148
|
-
this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
|
|
149
148
|
const abortRegistration = sendResult?.abortRegistration;
|
|
150
149
|
this.params.runnerParams.sdkEventDebugRef.current = undefined;
|
|
151
150
|
if (liveCompletion) {
|
|
152
151
|
void liveCompletion.waitCompletion
|
|
153
152
|
.finally(async () => {
|
|
153
|
+
this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
|
|
154
154
|
if (abortRegistration) {
|
|
155
155
|
this.safeCleanup(() => abortRegistration.signal.removeEventListener("abort", abortRegistration.listener));
|
|
156
156
|
}
|
|
@@ -160,6 +160,7 @@ export class CursorRunFinalizer {
|
|
|
160
160
|
.catch(() => {});
|
|
161
161
|
return;
|
|
162
162
|
}
|
|
163
|
+
this.safeCleanup(() => prepared?.restoreCursorSdkOutputFilter());
|
|
163
164
|
if (abortRegistration) {
|
|
164
165
|
this.safeCleanup(() => abortRegistration.signal.removeEventListener("abort", abortRegistration.listener));
|
|
165
166
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context, SimpleStreamOptions } from "@earendil-works/pi-ai";
|
|
2
2
|
import { getCursorConversationMessages, resolveCursorPiContext } from "./cursor-pi-context.js";
|
|
3
|
-
import type { AgentModeOption, ModelSelection, SDKAgent } from "@cursor/sdk";
|
|
3
|
+
import type { AgentModeOption, AgentOptions, ModelSelection, SDKAgent } from "@cursor/sdk";
|
|
4
4
|
import { configureCursorSdkHttp1 } from "./cursor-http1.js";
|
|
5
5
|
import { installCursorMcpToolTimeoutOverride } from "./cursor-mcp-timeout-override.js";
|
|
6
6
|
import { ensureCursorRipgrepPath } from "./cursor-ripgrep-path.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
type CursorSessionSendPlan,
|
|
14
14
|
} from "./cursor-session-agent.js";
|
|
15
15
|
import type { CursorPiBridgeToolRequest } from "./cursor-pi-tool-bridge.js";
|
|
16
|
-
import { buildCursorPrompt, estimateCursorPromptTokens } from "./context.js";
|
|
16
|
+
import { buildCursorPrompt, estimateCursorPromptTokens, getCursorPendingInput } from "./context.js";
|
|
17
17
|
import { getCursorPromptOptions } from "./cursor-usage-accounting.js";
|
|
18
18
|
import { getActiveContextToolNames } from "./cursor-context-tools.js";
|
|
19
19
|
import type { CursorLiveRun } from "./cursor-live-run-coordinator.js";
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
} from "./cursor-state.js";
|
|
30
30
|
import { resolveEffectiveCursorConfig } from "./cursor-runtime-state.js";
|
|
31
31
|
import type { CursorResolvedSdkConfig } from "./cursor-config.js";
|
|
32
|
+
import { buildCursorCustomSubagentDefinitions } from "./cursor-custom-subagent-definitions.js";
|
|
32
33
|
import { buildCursorModelSelection } from "./model-discovery.js";
|
|
33
34
|
import { getEffectiveCursorSettingSources } from "./cursor-setting-sources.js";
|
|
34
35
|
import {
|
|
@@ -74,14 +75,20 @@ interface PrepareCursorProviderTurnContext extends PrepareCursorProviderTurnPara
|
|
|
74
75
|
agentMode: AgentModeOption;
|
|
75
76
|
selection: ModelSelection;
|
|
76
77
|
fastEnabled: boolean | undefined;
|
|
78
|
+
agents: AgentOptions["agents"];
|
|
79
|
+
customSubagentNames: string[] | undefined;
|
|
77
80
|
}
|
|
78
81
|
|
|
79
|
-
function buildCursorCloudPromptContext(context: Context, handoff: "fresh" | "bootstrap" | "never"): Context {
|
|
82
|
+
function buildCursorCloudPromptContext(context: Context, handoff: "fresh" | "bootstrap" | "never", nativeSourceRoles?: readonly string[]): Context {
|
|
80
83
|
if (handoff === "bootstrap") return context;
|
|
81
84
|
// Fresh cloud runs omit history, not the current Pi instructions. Replay before
|
|
82
85
|
// selecting the user message, otherwise transcript-only inputs lose the prompt.
|
|
83
86
|
const current = resolveCursorPiContext(context);
|
|
84
87
|
const messages = getCursorConversationMessages(context);
|
|
88
|
+
if (nativeSourceRoles) {
|
|
89
|
+
const { start } = getCursorPendingInput(messages, nativeSourceRoles);
|
|
90
|
+
return { ...current, messages: messages.slice(start) };
|
|
91
|
+
}
|
|
85
92
|
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
86
93
|
const message = messages[index];
|
|
87
94
|
if (message.role === "user") return { ...current, messages: [message] };
|
|
@@ -121,7 +128,7 @@ function buildLocalCursorProviderTurnLifecycle(
|
|
|
121
128
|
async function prepareCursorCloudProviderTurn(
|
|
122
129
|
prepareParams: PrepareCursorProviderTurnContext,
|
|
123
130
|
): Promise<CloudCursorProviderTurnPrepareResult> {
|
|
124
|
-
const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled } = prepareParams;
|
|
131
|
+
const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled, agents, customSubagentNames } = prepareParams;
|
|
125
132
|
const { model, context, options } = params;
|
|
126
133
|
|
|
127
134
|
let restoreCursorSdkOutputFilter: (() => void) | undefined;
|
|
@@ -146,16 +153,16 @@ async function prepareCursorCloudProviderTurn(
|
|
|
146
153
|
|
|
147
154
|
const { Agent } = await loadCursorSdk();
|
|
148
155
|
restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
|
|
156
|
+
const promptContext = buildCursorCloudPromptContext(context, resolvedConfig.cloud.contextHandoff.value, params.request.nativeSourceRoles);
|
|
157
|
+
const nativeSourceRoles = params.request.nativeSourceRoles;
|
|
149
158
|
const promptOptions = {
|
|
150
159
|
...getCursorPromptOptions(model),
|
|
160
|
+
nativeSourceRoles: nativeSourceRoles?.slice(nativeSourceRoles.length - getCursorConversationMessages(promptContext).length),
|
|
151
161
|
agentMode,
|
|
152
162
|
includePiBridgeGuidance: false,
|
|
153
163
|
includePiAskQuestionGuidance: false,
|
|
154
164
|
};
|
|
155
|
-
const prompt = buildCursorPrompt(
|
|
156
|
-
buildCursorCloudPromptContext(context, resolvedConfig.cloud.contextHandoff.value),
|
|
157
|
-
promptOptions,
|
|
158
|
-
);
|
|
165
|
+
const prompt = buildCursorPrompt(promptContext, promptOptions);
|
|
159
166
|
const promptInputTokens = estimateCursorPromptTokens(prompt, promptOptions);
|
|
160
167
|
const agent = await suppressCursorSdkOutput(() =>
|
|
161
168
|
Agent.create(buildCursorCloudAgentOptions({
|
|
@@ -164,6 +171,7 @@ async function prepareCursorCloudProviderTurn(
|
|
|
164
171
|
agentMode,
|
|
165
172
|
resolvedConfig,
|
|
166
173
|
name: params.scope.sessionName,
|
|
174
|
+
agents,
|
|
167
175
|
})),
|
|
168
176
|
);
|
|
169
177
|
cloudAgentForCleanup = agent;
|
|
@@ -201,6 +209,7 @@ async function prepareCursorCloudProviderTurn(
|
|
|
201
209
|
promptOptions,
|
|
202
210
|
agentMode,
|
|
203
211
|
localForce: false,
|
|
212
|
+
...(customSubagentNames ? { customSubagentNames } : {}),
|
|
204
213
|
});
|
|
205
214
|
|
|
206
215
|
completed = true;
|
|
@@ -243,7 +252,7 @@ async function prepareCursorCloudProviderTurn(
|
|
|
243
252
|
async function prepareCursorLocalProviderTurn(
|
|
244
253
|
prepareParams: PrepareCursorProviderTurnContext,
|
|
245
254
|
): Promise<LocalCursorProviderTurnPrepareResult> {
|
|
246
|
-
const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled } = prepareParams;
|
|
255
|
+
const { params, cwd, resolvedApiKey, sdkEventDebug, throwIfAborted, resolvedConfig, agentMode, selection, fastEnabled, agents, customSubagentNames } = prepareParams;
|
|
247
256
|
const { model, context, options } = params;
|
|
248
257
|
|
|
249
258
|
let restoreCursorSdkOutputFilter: (() => void) | undefined;
|
|
@@ -279,7 +288,9 @@ async function prepareCursorLocalProviderTurn(
|
|
|
279
288
|
modelSelection: selection,
|
|
280
289
|
settingSources,
|
|
281
290
|
localSafety,
|
|
291
|
+
agents,
|
|
282
292
|
localResume: resolvedConfig.local.resume.value,
|
|
293
|
+
storeRoot: resolvedConfig.local.storeRoot.value,
|
|
283
294
|
useHttp1ForAgent,
|
|
284
295
|
debugRecorder: sdkEventDebug,
|
|
285
296
|
onBridgeToolRequest: (request: CursorPiBridgeToolRequest) => {
|
|
@@ -301,9 +312,10 @@ async function prepareCursorLocalProviderTurn(
|
|
|
301
312
|
const buildPromptOptions = (plan: ReturnType<typeof planCursorSessionSend>) => {
|
|
302
313
|
const promptOptions = {
|
|
303
314
|
...getCursorPromptOptions(model),
|
|
315
|
+
nativeSourceRoles: params.request.nativeSourceRoles,
|
|
304
316
|
agentMode,
|
|
305
317
|
includePiBridgeGuidance,
|
|
306
|
-
includePiAskQuestionGuidance:
|
|
318
|
+
includePiAskQuestionGuidance: false,
|
|
307
319
|
};
|
|
308
320
|
if (plan.mode !== "bootstrap" || !resolveCursorToolManifestEnabled()) {
|
|
309
321
|
return promptOptions;
|
|
@@ -317,7 +329,7 @@ async function prepareCursorLocalProviderTurn(
|
|
|
317
329
|
}),
|
|
318
330
|
};
|
|
319
331
|
};
|
|
320
|
-
let sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context);
|
|
332
|
+
let sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context, params.request.nativeSourceRoles);
|
|
321
333
|
if (sessionAgentLease.created && sessionAgentLease.resumed && sendPlan.mode === "incremental") {
|
|
322
334
|
sendPlan = { mode: "bootstrap", resetAgent: false, reason: "process_resume" };
|
|
323
335
|
}
|
|
@@ -329,7 +341,7 @@ async function prepareCursorLocalProviderTurn(
|
|
|
329
341
|
sessionAgentScopeKey = sessionAgentLease.scopeKey;
|
|
330
342
|
bridgeToolNames = new Set(sessionAgentLease.bridgeRun?.snapshot.tools.map((tool) => tool.mcpToolName) ?? []);
|
|
331
343
|
includePiBridgeGuidance = bridgeToolNames.size > 0;
|
|
332
|
-
sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context);
|
|
344
|
+
sendPlan = planCursorSessionSend(sessionAgentLease.sendState, context, params.request.nativeSourceRoles);
|
|
333
345
|
promptOptions = buildPromptOptions(sendPlan);
|
|
334
346
|
prompt = buildCursorSessionSendPrompt(context, promptOptions, sendPlan);
|
|
335
347
|
}
|
|
@@ -365,6 +377,7 @@ async function prepareCursorLocalProviderTurn(
|
|
|
365
377
|
activeToolNames: activeToolNames ? [...activeToolNames] : [],
|
|
366
378
|
sessionAgentScopeKey,
|
|
367
379
|
bridgeRunId: bridgeRun?.id,
|
|
380
|
+
...(customSubagentNames ? { customSubagentNames } : {}),
|
|
368
381
|
});
|
|
369
382
|
const nativeReplayId = createCursorNativeReplayId();
|
|
370
383
|
const textDeltas: string[] = [];
|
|
@@ -461,7 +474,9 @@ export async function prepareCursorProviderTurn(
|
|
|
461
474
|
return prepareCursorSummaryProviderTurn(prepareParams, selection);
|
|
462
475
|
}
|
|
463
476
|
const agentMode = getCursorProviderAgentModeOrThrow(params.scope.scopeKey);
|
|
464
|
-
const
|
|
477
|
+
const agents = buildCursorCustomSubagentDefinitions(resolvedConfig.subagents.value);
|
|
478
|
+
const customSubagentNames = agents ? Object.keys(agents) : undefined;
|
|
479
|
+
const context: PrepareCursorProviderTurnContext = { ...prepareParams, agentMode, selection, fastEnabled, agents, customSubagentNames };
|
|
465
480
|
|
|
466
481
|
return resolvedConfig.runtime.value === "cloud"
|
|
467
482
|
? prepareCursorCloudProviderTurn(context)
|
|
@@ -40,7 +40,7 @@ export async function prepareCursorSummaryProviderTurn(
|
|
|
40
40
|
configureCursorSdkHttp1(sdk, resolvedConfig.local.useHttp1ForAgent);
|
|
41
41
|
restoreCursorSdkOutputFilter = installCursorSdkOutputFilter();
|
|
42
42
|
sessionStore = (await openCursorSessionStoreForScope({
|
|
43
|
-
cwd, scopeKey: params.scope.scopeKey, persistent: false,
|
|
43
|
+
cwd, scopeKey: params.scope.persistentScopeKey ?? params.scope.scopeKey, persistent: false,
|
|
44
44
|
})).sessionStore;
|
|
45
45
|
throwIfAborted();
|
|
46
46
|
agent = await suppressCursorSdkOutput(() => sdk.Agent.create({
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { normalizeCursorToolName } from "./cursor-tool-presentation-registry.js";
|
|
1
2
|
import { getToolArgs, getToolName } from "./cursor-transcript-utils.js";
|
|
2
3
|
|
|
3
4
|
export type CursorToolDisplaySource = "started" | "fallback" | "transcript";
|
|
@@ -53,12 +54,12 @@ export class CursorToolCompletionLedger {
|
|
|
53
54
|
return stepId;
|
|
54
55
|
}
|
|
55
56
|
const fingerprint = getStartedToolCallFingerprint(toolCall);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return
|
|
57
|
+
const matches = [...this.startedToolCalls].filter(([, started]) => getStartedToolCallFingerprint(started) === fingerprint);
|
|
58
|
+
// Identical concurrent shells cannot be joined safely without a matching ID.
|
|
59
|
+
if (normalizeCursorToolName(getToolName(toolCall)) === "shell" && matches.length !== 1) return undefined;
|
|
60
|
+
const callId = matches[0]?.[0];
|
|
61
|
+
if (callId !== undefined) this.clearStartedToolCall(callId);
|
|
62
|
+
return callId;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
recordCompletedIdentity(identity: string): void {
|
|
@@ -121,5 +122,9 @@ export function getToolFingerprint(value: unknown): string {
|
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
export function getStartedToolCallFingerprint(toolCall: unknown): string {
|
|
124
|
-
|
|
125
|
+
const name = getToolName(toolCall);
|
|
126
|
+
// Accept legacy shell aliases; this does not establish that the SDK emits alias-changing pairs.
|
|
127
|
+
// Keep exact argument matching; assistant text alone is not completion proof.
|
|
128
|
+
const toolName = normalizeCursorToolName(name) === "shell" ? "shell" : name;
|
|
129
|
+
return getToolFingerprint({ toolName, args: getToolArgs(toolCall) });
|
|
125
130
|
}
|
package/src/cursor-provider.ts
CHANGED
|
@@ -29,6 +29,7 @@ import type { CursorCloudLifecycleRecorder } from "./cursor-cloud-lifecycle.js";
|
|
|
29
29
|
import type { CursorRequestProvenance } from "./cursor-request-provenance.js";
|
|
30
30
|
import type { CursorUsageRecorder } from "./cursor-usage-ledger.js";
|
|
31
31
|
import { runExclusiveCursorSessionTurn, __testUtils as cursorSessionTurnQueueTestUtils } from "./cursor-session-turn-queue.js";
|
|
32
|
+
import { withCursorSdkOutputNoticeHandler, type CursorSdkOutputNoticeHandler } from "./cursor-sdk-output-filter.js";
|
|
32
33
|
|
|
33
34
|
function makeInitialMessage(model: Model<Api>): AssistantMessage {
|
|
34
35
|
return {
|
|
@@ -57,6 +58,7 @@ export interface CursorProviderOwnership {
|
|
|
57
58
|
recordCloudLifecycle: CursorCloudLifecycleRecorder;
|
|
58
59
|
request: CursorRequestProvenance;
|
|
59
60
|
usageRecorder: CursorUsageRecorder;
|
|
61
|
+
reportSdkNotice?: CursorSdkOutputNoticeHandler;
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
export function streamCursor(
|
|
@@ -92,7 +94,7 @@ export function streamCursor(
|
|
|
92
94
|
stream.push({ type: "start", partial });
|
|
93
95
|
await runExclusiveCursorSessionTurn(
|
|
94
96
|
scope.scopeKey,
|
|
95
|
-
() => runner.run(installCursorSdkProcessErrorGuard()),
|
|
97
|
+
() => withCursorSdkOutputNoticeHandler(ownership.reportSdkNotice, () => runner.run(installCursorSdkProcessErrorGuard())),
|
|
96
98
|
options?.signal,
|
|
97
99
|
);
|
|
98
100
|
} catch (error) {
|
|
@@ -11,7 +11,7 @@ export const CURSOR_ASK_QUESTION_TOOL_NAME = "cursor_ask_question";
|
|
|
11
11
|
export const CURSOR_ASK_QUESTION_ENV = "PI_CURSOR_ASK_QUESTION";
|
|
12
12
|
|
|
13
13
|
export function resolveCursorAskQuestionEnabled(env: Record<string, string | undefined> = process.env): boolean {
|
|
14
|
-
return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV],
|
|
14
|
+
return parseEnvBoolean(env[CURSOR_ASK_QUESTION_ENV], false);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/** Package-namespaced event while `cursor_ask_question` awaits pi UI input. */
|
|
@@ -216,13 +216,13 @@ export function registerCursorQuestionTool(pi: CursorQuestionToolExtensionApi):
|
|
|
216
216
|
name: CURSOR_ASK_QUESTION_TOOL_NAME,
|
|
217
217
|
label: "Cursor question",
|
|
218
218
|
description:
|
|
219
|
-
"Ask the user a clarifying question
|
|
220
|
-
promptSnippet: "
|
|
219
|
+
"Ask the user a clarifying question through pi UI. Do not use this unless the user asked to be prompted; otherwise proceed with a stated assumption.",
|
|
220
|
+
promptSnippet: "Do not prompt the user through cursor_ask_question unless they asked to be asked",
|
|
221
221
|
executionMode: "sequential",
|
|
222
222
|
parameters: CursorAskQuestionParamsSchema,
|
|
223
223
|
promptGuidelines: [
|
|
224
|
-
"
|
|
225
|
-
"
|
|
224
|
+
"Do not call cursor_ask_question unless the user explicitly asked to be prompted or to choose among options.",
|
|
225
|
+
"If this tool is available, prefer a reasonable default and state the assumption instead of blocking on a questionnaire.",
|
|
226
226
|
],
|
|
227
227
|
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
228
228
|
const questions = normalizeQuestions(params as CursorAskQuestionParams);
|
|
@@ -5,6 +5,8 @@ import type { Api, Context, Model } from "@earendil-works/pi-ai";
|
|
|
5
5
|
export interface CursorRequestProvenance {
|
|
6
6
|
readonly purpose: "normal" | "compaction" | "tree";
|
|
7
7
|
readonly occupancyFloor?: number;
|
|
8
|
+
/** Canonical native source roles in converted conversation order, only for an equivalent request. */
|
|
9
|
+
readonly nativeSourceRoles?: readonly string[];
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
interface Measurement {
|
|
@@ -14,10 +16,11 @@ interface Measurement {
|
|
|
14
16
|
readonly tokens: number;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
/** Receipt data contains hashes and scalars only, never conversation text. */
|
|
19
|
+
/** Receipt data contains hashes and source-role/accounting scalars only, never conversation text. */
|
|
18
20
|
export interface CursorRequestProjectionSnapshot {
|
|
19
21
|
readonly digest: string;
|
|
20
22
|
readonly measurements: readonly Measurement[];
|
|
23
|
+
readonly nativeSourceRoles: readonly string[];
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
function projectionDigest(messages: readonly unknown[]): string {
|
|
@@ -49,7 +52,13 @@ export function captureCursorRequestProjection(manager: ExtensionContext["sessio
|
|
|
49
52
|
measurements.push(Object.freeze({ api: message.api, provider: message.provider, model: message.model, tokens }));
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
|
-
|
|
55
|
+
const nativeSourceRoles = projection.messages.flatMap((message) =>
|
|
56
|
+
message.role === "system" ? [] : convertToLlm([message]).map(() => message.role));
|
|
57
|
+
return Object.freeze({
|
|
58
|
+
digest: projectionDigest(convertToLlm(projection.messages)),
|
|
59
|
+
measurements: Object.freeze(measurements),
|
|
60
|
+
nativeSourceRoles: Object.freeze(nativeSourceRoles),
|
|
61
|
+
});
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
export function resolveCursorRequestProvenance(
|
|
@@ -58,7 +67,13 @@ export function resolveCursorRequestProvenance(
|
|
|
58
67
|
context: Context,
|
|
59
68
|
purpose: CursorRequestProvenance["purpose"],
|
|
60
69
|
): CursorRequestProvenance {
|
|
70
|
+
// ponytail: canonical native origin only. Unmatched transforms stay conservative;
|
|
71
|
+
// upgrade if Pi exposes final request-bound source provenance.
|
|
61
72
|
if (purpose !== "normal" || snapshot.digest !== projectionDigest(context.messages)) return Object.freeze({ purpose });
|
|
62
73
|
const measurement = snapshot.measurements.findLast((item) => item.api === model.api && item.provider === model.provider && item.model === model.id && item.tokens <= model.contextWindow);
|
|
63
|
-
return Object.freeze({
|
|
74
|
+
return Object.freeze({
|
|
75
|
+
purpose,
|
|
76
|
+
nativeSourceRoles: snapshot.nativeSourceRoles,
|
|
77
|
+
...(measurement ? { occupancyFloor: measurement.tokens } : {}),
|
|
78
|
+
});
|
|
64
79
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export {
|
|
2
2
|
CURSOR_SDK_STARTUP_NOISE_PATTERNS,
|
|
3
|
+
withCursorSdkOutputNoticeHandler,
|
|
3
4
|
installCursorSdkOutputFilter,
|
|
4
5
|
isCursorSdkOutputSuppressed,
|
|
5
6
|
isCursorSdkStartupNoise,
|
|
6
7
|
suppressCursorSdkOutput,
|
|
7
8
|
} from "../shared/cursor-sdk-output-filter.mjs";
|
|
9
|
+
export type { CursorSdkCapabilityNotice, CursorSdkOutputNoticeHandler } from "../shared/cursor-sdk-output-filter.mjs";
|
|
@@ -40,7 +40,7 @@ function hasActiveAbortSuppression(): boolean {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function isCursorProvenance(source: string): boolean {
|
|
43
|
-
return source === "cursor-sdk-stack" || source === "cursor-
|
|
43
|
+
return source === "cursor-sdk-stack" || source === "cursor-backend-details";
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function isCursorSdkWriteIterableClosedError(error: unknown): boolean {
|
|
@@ -83,7 +83,6 @@ function shouldSuppressProcessError(event: string | symbol, args: readonly unkno
|
|
|
83
83
|
if (!classification) return false;
|
|
84
84
|
if (classification.kind === "abort") return hasActiveAbortSuppression();
|
|
85
85
|
if (activeProviderTurns.size === 0) return false;
|
|
86
|
-
if (classification.kind === "network") return isCursorProvenance(classification.source) || classification.source === "connect-node-stack";
|
|
87
86
|
return isCursorProvenance(classification.source);
|
|
88
87
|
}
|
|
89
88
|
|