pi-cursor-sdk 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/README.md +110 -30
- package/dist/context.js +53 -34
- package/dist/cursor-api-key.js +34 -19
- package/dist/cursor-cloud-options.js +1 -0
- package/dist/cursor-config.js +59 -0
- package/dist/cursor-custom-store-path.js +177 -0
- package/dist/cursor-custom-subagent-definitions.js +14 -0
- package/dist/cursor-fallback-models.generated.js +1 -1
- package/dist/cursor-fallback-warning.js +8 -2
- package/dist/cursor-live-run-coordinator.js +22 -2
- package/dist/cursor-mcp-timeout-override.js +3 -1
- package/dist/cursor-pi-tool-bridge-run.js +21 -0
- package/dist/cursor-pi-tool-bridge-server.js +1 -1
- package/dist/cursor-provider-binding.js +70 -10
- package/dist/cursor-provider-errors.js +33 -26
- package/dist/cursor-provider-live-run-drain.js +10 -4
- package/dist/cursor-provider-run-finalizer.js +2 -1
- package/dist/cursor-provider-turn-prepare.js +25 -9
- package/dist/cursor-provider-turn-summary.js +1 -1
- package/dist/cursor-provider-turn-tool-ledger.js +13 -7
- package/dist/cursor-provider.js +2 -1
- package/dist/cursor-question-tool.js +5 -5
- package/dist/cursor-request-provenance.js +13 -2
- package/dist/cursor-sdk-output-filter.js +1 -1
- package/dist/cursor-sdk-process-error-guard.js +1 -3
- package/dist/cursor-sdk-runtime.js +13 -14
- package/dist/cursor-sdk-vendor-env.js +20 -0
- package/dist/cursor-session-agent-cleanup.js +29 -26
- package/dist/cursor-session-agent.js +38 -16
- package/dist/cursor-session-send-policy.js +2 -2
- package/dist/cursor-session-store.js +235 -45
- package/dist/cursor-state.js +6 -3
- package/dist/cursor-tool-manifest.js +1 -1
- package/dist/index.js +21 -19
- package/dist/model-discovery.js +51 -18
- package/dist/model-list-cache.js +12 -1
- package/docs/cursor-live-smoke-checklist.md +2 -2
- package/docs/cursor-model-ux-spec.md +70 -26
- package/docs/cursor-native-tool-replay.md +13 -5
- package/docs/cursor-native-tool-visual-audit.md +1 -1
- package/docs/cursor-testing-lessons.md +43 -5
- package/docs/cursor-tool-surfaces.md +3 -3
- package/node_modules/@hono/node-server/README.md +21 -10
- package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
- package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
- package/node_modules/@hono/node-server/dist/index.cjs +41 -19
- package/node_modules/@hono/node-server/dist/index.mjs +42 -20
- package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
- package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
- package/node_modules/@hono/node-server/package.json +3 -2
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/package.json +2 -2
- package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
- package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
- package/node_modules/@modelcontextprotocol/server/README.md +1 -7
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
- package/node_modules/@modelcontextprotocol/server/package.json +4 -4
- package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
- package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
- package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
- package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
- package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
- package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
- package/node_modules/hono/dist/adapter/bun/index.js +3 -13
- package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
- package/node_modules/hono/dist/adapter/bun/server.js +11 -5
- package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
- package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
- package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
- package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
- package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
- package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
- package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
- package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
- package/node_modules/hono/dist/adapter/deno/index.js +3 -10
- package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
- package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
- package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
- package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
- package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
- package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
- package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
- package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
- package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
- package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
- package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
- package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
- package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
- package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
- package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
- package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
- package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
- package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
- package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
- package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
- package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
- package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
- package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
- package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
- package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
- package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
- package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
- package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
- package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
- package/node_modules/hono/dist/cjs/client/client.js +139 -212
- package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
- package/node_modules/hono/dist/cjs/client/index.js +7 -32
- package/node_modules/hono/dist/cjs/client/types.js +0 -15
- package/node_modules/hono/dist/cjs/client/utils.js +54 -92
- package/node_modules/hono/dist/cjs/compose.js +49 -66
- package/node_modules/hono/dist/cjs/context.js +379 -450
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
- package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
- package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
- package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
- package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
- package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
- package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
- package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
- package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
- package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
- package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
- package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
- package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
- package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
- package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
- package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
- package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
- package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
- package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
- package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
- package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
- package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
- package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
- package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
- package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
- package/node_modules/hono/dist/cjs/hono-base.js +347 -403
- package/node_modules/hono/dist/cjs/hono.js +28 -42
- package/node_modules/hono/dist/cjs/http-exception.js +55 -56
- package/node_modules/hono/dist/cjs/index.js +22 -30
- package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
- package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
- package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
- package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
- package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
- package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
- package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
- package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
- package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
- package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
- package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
- package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
- package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
- package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
- package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
- package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
- package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
- package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
- package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
- package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
- package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
- package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
- package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
- package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
- package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
- package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
- package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
- package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
- package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
- package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
- package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
- package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
- package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
- package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
- package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
- package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
- package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
- package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
- package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
- package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
- package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
- package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
- package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
- package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
- package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
- package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
- package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
- package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
- package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
- package/node_modules/hono/dist/cjs/request/constants.js +5 -27
- package/node_modules/hono/dist/cjs/request.js +334 -346
- package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
- package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
- package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
- package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
- package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
- package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
- package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
- package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
- package/node_modules/hono/dist/cjs/router/utils.js +5 -27
- package/node_modules/hono/dist/cjs/router.js +37 -37
- package/node_modules/hono/dist/cjs/types.js +5 -28
- package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
- package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
- package/node_modules/hono/dist/cjs/utils/body.js +84 -110
- package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
- package/node_modules/hono/dist/cjs/utils/color.js +35 -44
- package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
- package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
- package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
- package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
- package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
- package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
- package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
- package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
- package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
- package/node_modules/hono/dist/cjs/utils/html.js +96 -137
- package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
- package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
- package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
- package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
- package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
- package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
- package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
- package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
- package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
- package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
- package/node_modules/hono/dist/cjs/utils/types.js +0 -15
- package/node_modules/hono/dist/cjs/utils/url.js +185 -234
- package/node_modules/hono/dist/cjs/validator/index.js +3 -27
- package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
- package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
- package/node_modules/hono/dist/client/client.js +138 -197
- package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
- package/node_modules/hono/dist/client/index.js +3 -7
- package/node_modules/hono/dist/client/types.js +1 -0
- package/node_modules/hono/dist/client/utils.js +51 -68
- package/node_modules/hono/dist/compose.js +49 -45
- package/node_modules/hono/dist/context.js +376 -426
- package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
- package/node_modules/hono/dist/helper/accepts/index.js +1 -4
- package/node_modules/hono/dist/helper/adapter/index.js +33 -52
- package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
- package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
- package/node_modules/hono/dist/helper/cookie/index.js +74 -94
- package/node_modules/hono/dist/helper/css/common.js +167 -225
- package/node_modules/hono/dist/helper/css/index.js +132 -137
- package/node_modules/hono/dist/helper/dev/index.js +44 -49
- package/node_modules/hono/dist/helper/factory/index.js +27 -27
- package/node_modules/hono/dist/helper/html/index.js +30 -39
- package/node_modules/hono/dist/helper/proxy/index.js +116 -88
- package/node_modules/hono/dist/helper/route/index.js +121 -43
- package/node_modules/hono/dist/helper/ssg/index.js +3 -18
- package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
- package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
- package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
- package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
- package/node_modules/hono/dist/helper/streaming/index.js +2 -8
- package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
- package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
- package/node_modules/hono/dist/helper/streaming/text.js +9 -10
- package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
- package/node_modules/hono/dist/helper/testing/index.js +16 -10
- package/node_modules/hono/dist/helper/websocket/index.js +49 -53
- package/node_modules/hono/dist/hono-base.js +344 -379
- package/node_modules/hono/dist/hono.js +27 -20
- package/node_modules/hono/dist/http-exception.js +53 -33
- package/node_modules/hono/dist/index.js +19 -6
- package/node_modules/hono/dist/jsx/base.js +231 -340
- package/node_modules/hono/dist/jsx/children.js +16 -20
- package/node_modules/hono/dist/jsx/components.js +118 -170
- package/node_modules/hono/dist/jsx/constants.js +9 -15
- package/node_modules/hono/dist/jsx/context.js +153 -150
- package/node_modules/hono/dist/jsx/dom/client.js +45 -48
- package/node_modules/hono/dist/jsx/dom/components.js +21 -29
- package/node_modules/hono/dist/jsx/dom/context.js +37 -44
- package/node_modules/hono/dist/jsx/dom/css.js +142 -147
- package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
- package/node_modules/hono/dist/jsx/dom/index.js +71 -134
- package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
- package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
- package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
- package/node_modules/hono/dist/jsx/dom/render.js +492 -631
- package/node_modules/hono/dist/jsx/dom/server.js +32 -32
- package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
- package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
- package/node_modules/hono/dist/jsx/index.js +45 -98
- package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
- package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
- package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
- package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
- package/node_modules/hono/dist/jsx/streaming.js +120 -142
- package/node_modules/hono/dist/jsx/types.js +1 -0
- package/node_modules/hono/dist/jsx/utils.js +105 -168
- package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
- package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
- package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
- package/node_modules/hono/dist/middleware/cache/index.js +165 -190
- package/node_modules/hono/dist/middleware/combine/index.js +134 -73
- package/node_modules/hono/dist/middleware/compress/index.js +75 -69
- package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
- package/node_modules/hono/dist/middleware/cors/index.js +107 -86
- package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
- package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
- package/node_modules/hono/dist/middleware/etag/index.js +71 -70
- package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
- package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
- package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
- package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
- package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
- package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
- package/node_modules/hono/dist/middleware/language/index.js +2 -15
- package/node_modules/hono/dist/middleware/language/language.js +180 -157
- package/node_modules/hono/dist/middleware/logger/index.js +43 -37
- package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
- package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
- package/node_modules/hono/dist/middleware/mount/index.js +70 -0
- package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
- package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
- package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
- package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
- package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
- package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
- package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
- package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
- package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
- package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
- package/node_modules/hono/dist/middleware/timing/index.js +2 -9
- package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
- package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
- package/node_modules/hono/dist/preset/quick.js +17 -15
- package/node_modules/hono/dist/preset/tiny.js +14 -11
- package/node_modules/hono/dist/request/constants.js +4 -5
- package/node_modules/hono/dist/request.js +328 -319
- package/node_modules/hono/dist/router/linear-router/index.js +1 -4
- package/node_modules/hono/dist/router/linear-router/router.js +93 -120
- package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
- package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
- package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
- package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
- package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
- package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
- package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
- package/node_modules/hono/dist/router/smart-router/index.js +1 -4
- package/node_modules/hono/dist/router/smart-router/router.js +46 -55
- package/node_modules/hono/dist/router/trie-router/index.js +1 -4
- package/node_modules/hono/dist/router/trie-router/node.js +131 -162
- package/node_modules/hono/dist/router/trie-router/router.js +11 -14
- package/node_modules/hono/dist/router/utils.js +4 -5
- package/node_modules/hono/dist/router.js +35 -14
- package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
- package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
- package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
- package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
- package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
- package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
- package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
- package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
- package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
- package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
- package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
- package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
- package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
- package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
- package/node_modules/hono/dist/types/client/client.d.ts +5 -3
- package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
- package/node_modules/hono/dist/types/client/index.d.ts +5 -7
- package/node_modules/hono/dist/types/client/types.d.ts +134 -159
- package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
- package/node_modules/hono/dist/types/compose.d.ts +4 -2
- package/node_modules/hono/dist/types/context.d.ts +335 -335
- package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
- package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
- package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
- package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
- package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
- package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
- package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
- package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
- package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
- package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
- package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
- package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
- package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
- package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
- package/node_modules/hono/dist/types/hono.d.ts +11 -10
- package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
- package/node_modules/hono/dist/types/index.d.ts +6 -37
- package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
- package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
- package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
- package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
- package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
- package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
- package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
- package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
- package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
- package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
- package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
- package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
- package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
- package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
- package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
- package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
- package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
- package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
- package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
- package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
- package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
- package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
- package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
- package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
- package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
- package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
- package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
- package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
- package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
- package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
- package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
- package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
- package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
- package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
- package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
- package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
- package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
- package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
- package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
- package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
- package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
- package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
- package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
- package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
- package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
- package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/request.d.ts +288 -286
- package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
- package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
- package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
- package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
- package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
- package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/router.d.ts +23 -22
- package/node_modules/hono/dist/types/types.d.ts +146 -505
- package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
- package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
- package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
- package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
- package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
- package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
- package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
- package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
- package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
- package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
- package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
- package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
- package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
- package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
- package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
- package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
- package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
- package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
- package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
- package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
- package/node_modules/hono/dist/types.js +4 -6
- package/node_modules/hono/dist/utils/accept.js +185 -212
- package/node_modules/hono/dist/utils/basic-auth.js +18 -21
- package/node_modules/hono/dist/utils/body.js +87 -92
- package/node_modules/hono/dist/utils/buffer.js +44 -71
- package/node_modules/hono/dist/utils/color.js +33 -21
- package/node_modules/hono/dist/utils/compress.js +11 -5
- package/node_modules/hono/dist/utils/concurrent.js +29 -38
- package/node_modules/hono/dist/utils/constants.js +7 -5
- package/node_modules/hono/dist/utils/cookie.js +114 -163
- package/node_modules/hono/dist/utils/crypto.js +30 -40
- package/node_modules/hono/dist/utils/encode.js +30 -26
- package/node_modules/hono/dist/utils/filepath.js +23 -33
- package/node_modules/hono/dist/utils/handler.js +10 -11
- package/node_modules/hono/dist/utils/headers.js +1 -0
- package/node_modules/hono/dist/utils/html.js +97 -117
- package/node_modules/hono/dist/utils/http-status.js +1 -0
- package/node_modules/hono/dist/utils/ipaddr.js +227 -279
- package/node_modules/hono/dist/utils/jwt/index.js +12 -4
- package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
- package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
- package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
- package/node_modules/hono/dist/utils/jwt/types.js +79 -95
- package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
- package/node_modules/hono/dist/utils/mime.js +74 -79
- package/node_modules/hono/dist/utils/stream.js +86 -88
- package/node_modules/hono/dist/utils/types.js +1 -0
- package/node_modules/hono/dist/utils/url.js +187 -215
- package/node_modules/hono/dist/validator/index.js +1 -4
- package/node_modules/hono/dist/validator/utils.js +1 -0
- package/node_modules/hono/dist/validator/validator.js +61 -83
- package/node_modules/hono/package.json +35 -27
- package/package.json +16 -14
- package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
- package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
- package/scripts/platform-smoke/artifacts.mjs +7 -1
- package/shared/cursor-sdk-output-filter.d.mts +3 -0
- package/shared/cursor-sdk-output-filter.mjs +117 -44
- package/src/context.ts +57 -33
- package/src/cursor-api-key.ts +37 -17
- package/src/cursor-cloud-options.ts +2 -0
- package/src/cursor-config.ts +76 -0
- package/src/cursor-custom-store-path.ts +151 -0
- package/src/cursor-custom-subagent-definitions.ts +21 -0
- package/src/cursor-fallback-models.generated.ts +1 -1
- package/src/cursor-fallback-warning.ts +7 -3
- package/src/cursor-live-run-coordinator.ts +21 -2
- package/src/cursor-mcp-timeout-override.ts +3 -1
- package/src/cursor-pi-tool-bridge-run.ts +21 -0
- package/src/cursor-pi-tool-bridge-server.ts +1 -2
- package/src/cursor-pi-tool-bridge-types.ts +3 -0
- package/src/cursor-provider-binding.ts +70 -11
- package/src/cursor-provider-errors.ts +32 -28
- package/src/cursor-provider-live-run-drain.ts +9 -4
- package/src/cursor-provider-run-finalizer.ts +2 -1
- package/src/cursor-provider-turn-prepare.ts +28 -13
- package/src/cursor-provider-turn-summary.ts +1 -1
- package/src/cursor-provider-turn-tool-ledger.ts +12 -7
- package/src/cursor-provider.ts +3 -1
- package/src/cursor-question-tool.ts +5 -5
- package/src/cursor-request-provenance.ts +18 -3
- package/src/cursor-sdk-output-filter.ts +2 -0
- package/src/cursor-sdk-process-error-guard.ts +1 -2
- package/src/cursor-sdk-runtime.ts +14 -15
- package/src/cursor-sdk-vendor-env.ts +22 -0
- package/src/cursor-session-agent-cleanup.ts +28 -27
- package/src/cursor-session-agent.ts +44 -17
- package/src/cursor-session-send-policy.ts +2 -2
- package/src/cursor-session-store.ts +259 -53
- package/src/cursor-state.ts +7 -2
- package/src/cursor-tool-manifest.ts +1 -1
- package/src/index.ts +19 -19
- package/src/model-discovery.ts +62 -23
- package/src/model-list-cache.ts +11 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
1
|
+
// Vendor env must initialize before the static @cursor/sdk import below so
|
|
2
|
+
// tree-sitter natives resolve when Pi lives outside this package's node_modules.
|
|
3
|
+
import "./cursor-sdk-vendor-env.js";
|
|
4
|
+
import * as CursorSdk from "@cursor/sdk";
|
|
5
|
+
/**
|
|
6
|
+
* Load the Cursor SDK module.
|
|
7
|
+
*
|
|
8
|
+
* Uses a static import so Pi's compiled-Bun extension graph includes @cursor/sdk
|
|
9
|
+
* (a runtime dynamic bare import is omitted from that graph; see #228).
|
|
10
|
+
* `loadCursorSdk` remains async for call-site compatibility and so vendor-env
|
|
11
|
+
* side effects (imported above) always run before callers receive the module.
|
|
12
|
+
*/
|
|
4
13
|
export async function loadCursorSdk() {
|
|
5
|
-
|
|
6
|
-
if (process.env.CURSOR_TREE_SITTER_VENDOR_DIR === undefined) {
|
|
7
|
-
const packageDirectory = resolveCursorSdkPlatformPackageDirectory();
|
|
8
|
-
if (packageDirectory) {
|
|
9
|
-
const vendor = join(packageDirectory, "vendor");
|
|
10
|
-
if (existsSync(join(vendor, "tree-sitter", "index.js")) && existsSync(join(vendor, "tree-sitter-bash", "index.js"))) {
|
|
11
|
-
process.env.CURSOR_TREE_SITTER_VENDOR_DIR = vendor;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return import("@cursor/sdk");
|
|
14
|
+
return CursorSdk;
|
|
16
15
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { resolveCursorSdkPlatformPackageDirectory } from "./cursor-ripgrep-path.js";
|
|
4
|
+
/**
|
|
5
|
+
* Ensure CURSOR_TREE_SITTER_VENDOR_DIR is set before @cursor/sdk first loads.
|
|
6
|
+
* Must run as a side effect of importing this module (before a static SDK import).
|
|
7
|
+
*/
|
|
8
|
+
export function ensureCursorTreeSitterVendorDir() {
|
|
9
|
+
if (process.env.CURSOR_TREE_SITTER_VENDOR_DIR !== undefined)
|
|
10
|
+
return;
|
|
11
|
+
const packageDirectory = resolveCursorSdkPlatformPackageDirectory();
|
|
12
|
+
if (!packageDirectory)
|
|
13
|
+
return;
|
|
14
|
+
const vendor = join(packageDirectory, "vendor");
|
|
15
|
+
if (existsSync(join(vendor, "tree-sitter", "index.js")) &&
|
|
16
|
+
existsSync(join(vendor, "tree-sitter-bash", "index.js"))) {
|
|
17
|
+
process.env.CURSOR_TREE_SITTER_VENDOR_DIR = vendor;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
ensureCursorTreeSitterVendorDir();
|
|
@@ -4,7 +4,7 @@ import { scrubSensitiveText } from "./cursor-sensitive-text.js";
|
|
|
4
4
|
import { loadCursorSdk } from "./cursor-sdk-runtime.js";
|
|
5
5
|
import { cursorSessionScopeKeyForManager } from "./cursor-session-scope.js";
|
|
6
6
|
import { CURSOR_SESSION_AGENT_RESUME_ENTRY_TYPE, isCursorLocalAgentId, parseCursorSessionAgentResumeEntryData, readResumableCursorSessionAgentIds, resolveCursorSessionRepoRoot, } from "./cursor-session-agent-resume.js";
|
|
7
|
-
import {
|
|
7
|
+
import { withCursorSessionStoreIdentities, openCursorSessionStore, resolveCursorSessionStoreIdentity, } from "./cursor-session-store.js";
|
|
8
8
|
export const CURSOR_SESSION_AGENT_CLEANUP_ENTRY_TYPE = "cursor-sdk-agent-cleanup";
|
|
9
9
|
class InvalidCursorSessionStoreIdentityError extends Error {
|
|
10
10
|
}
|
|
@@ -202,7 +202,7 @@ function appendDurableCleanupEntry(pi, ctx, data) {
|
|
|
202
202
|
return false;
|
|
203
203
|
return fsyncExistingRegularFile(sessionFile);
|
|
204
204
|
}
|
|
205
|
-
export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
|
|
205
|
+
export async function runCursorSessionAgentCleanupCommand(pi, args, ctx, storeRoot) {
|
|
206
206
|
const usage = "Usage: /cursor-local-resume-cleanup [--dry-run|--yes]";
|
|
207
207
|
const tokens = args.trim().split(/\s+/).filter(Boolean);
|
|
208
208
|
const dryRun = tokens.length === 0 || (tokens.length === 1 && tokens[0] === "--dry-run");
|
|
@@ -236,7 +236,7 @@ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
|
|
|
236
236
|
}
|
|
237
237
|
return;
|
|
238
238
|
}
|
|
239
|
-
if (!appendDurableCleanupEntry(pi, ctx, { action: "delete", phase: "intent", ...baseEntry })) {
|
|
239
|
+
if (!scope.sessionFile || !appendDurableCleanupEntry(pi, ctx, { action: "delete", phase: "intent", ...baseEntry })) {
|
|
240
240
|
ctx.ui.notify("Cleanup intent could not be durably recorded. No agents were deleted.", "error");
|
|
241
241
|
return;
|
|
242
242
|
}
|
|
@@ -244,31 +244,34 @@ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
|
|
|
244
244
|
const failedAgentIds = [];
|
|
245
245
|
const openedStores = new Map();
|
|
246
246
|
try {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
openedStore =
|
|
259
|
-
|
|
247
|
+
await withCursorSessionStoreIdentities(ctx.cwd, scope.scopeKey, storeRoot, async (identities) => {
|
|
248
|
+
const operations = await getSdkOperations();
|
|
249
|
+
for (const candidate of plan.candidates) {
|
|
250
|
+
const { agentId } = candidate;
|
|
251
|
+
try {
|
|
252
|
+
const identity = await resolveCursorSessionStoreIdentity({
|
|
253
|
+
cwd: ctx.cwd, scopeKey: scope.scopeKey,
|
|
254
|
+
identities, recordedIdentity: candidate.storeIdentity, agentId,
|
|
255
|
+
});
|
|
256
|
+
if (!identity)
|
|
257
|
+
throw new InvalidCursorSessionStoreIdentityError("Recorded Cursor local store identity is not valid for this pi session");
|
|
258
|
+
let openedStore = openedStores.get(identity.stateRoot);
|
|
259
|
+
if (!openedStore) {
|
|
260
|
+
openedStore = await openCursorSessionStore(ctx.cwd, identity, identities.workspaceRoot, identities.storeRoot);
|
|
261
|
+
openedStores.set(identity.stateRoot, openedStore);
|
|
262
|
+
}
|
|
263
|
+
await operations.delete(agentId, { cwd: ctx.cwd, store: openedStore.store });
|
|
264
|
+
deletedAgentIds.push(agentId);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
failedAgentIds.push({
|
|
268
|
+
agentId,
|
|
269
|
+
error: scrubSensitiveText(getString(asRecord(error), "message") ?? String(error)),
|
|
270
|
+
...(error instanceof InvalidCursorSessionStoreIdentityError ? { retryable: false } : {}),
|
|
271
|
+
});
|
|
260
272
|
}
|
|
261
|
-
await operations.delete(agentId, { cwd: ctx.cwd, store: openedStore.store });
|
|
262
|
-
deletedAgentIds.push(agentId);
|
|
263
|
-
}
|
|
264
|
-
catch (error) {
|
|
265
|
-
failedAgentIds.push({
|
|
266
|
-
agentId,
|
|
267
|
-
error: scrubSensitiveText(getString(asRecord(error), "message") ?? String(error)),
|
|
268
|
-
...(error instanceof InvalidCursorSessionStoreIdentityError ? { retryable: false } : {}),
|
|
269
|
-
});
|
|
270
273
|
}
|
|
271
|
-
}
|
|
274
|
+
});
|
|
272
275
|
}
|
|
273
276
|
catch (error) {
|
|
274
277
|
const message = scrubSensitiveText(getString(asRecord(error), "message") ?? String(error));
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { normalizeCursorCustomStoreRoot } from "./cursor-custom-store-path.js";
|
|
2
3
|
import { getRegisteredCursorPiToolBridge, } from "./cursor-pi-tool-bridge.js";
|
|
3
4
|
import { computeCursorContextFingerprint } from "./context.js";
|
|
4
5
|
import { getCursorSessionFile, getCursorSessionScopeGeneration, getCursorSessionScopeKey } from "./cursor-session-scope.js";
|
|
@@ -26,11 +27,14 @@ function assertScopeAcceptsAcquire(scopeKey) {
|
|
|
26
27
|
}
|
|
27
28
|
terminalDisposedScopeGenerations.delete(scopeKey);
|
|
28
29
|
}
|
|
29
|
-
function
|
|
30
|
+
function samePoolIdentity(entry, poolKey, capturedStoreRoot) {
|
|
31
|
+
return entry.poolKey === poolKey && entry.storeRoot === capturedStoreRoot;
|
|
32
|
+
}
|
|
33
|
+
function rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, storeRoot, error) {
|
|
30
34
|
if (!(error instanceof SessionCursorAgentCreationSupersededError))
|
|
31
35
|
return;
|
|
32
36
|
const replacement = sessionAgentsByScope.get(scopeKey);
|
|
33
|
-
if (replacement && replacement
|
|
37
|
+
if (replacement && !samePoolIdentity(replacement, poolKey, storeRoot)) {
|
|
34
38
|
throw error;
|
|
35
39
|
}
|
|
36
40
|
}
|
|
@@ -87,6 +91,20 @@ function buildBridgePoolKeySuffix(registeredBridge) {
|
|
|
87
91
|
return "bridge:absent";
|
|
88
92
|
return registeredBridge.getToolSurfaceSignature();
|
|
89
93
|
}
|
|
94
|
+
function buildCustomSubagentPoolKeySuffix(agents) {
|
|
95
|
+
const definitions = Object.entries(agents ?? {}).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
|
|
96
|
+
if (!definitions.length)
|
|
97
|
+
return [];
|
|
98
|
+
const content = definitions.map(([name, entry]) => [
|
|
99
|
+
name, entry.description, entry.prompt,
|
|
100
|
+
entry.model === undefined ? null : entry.model === "inherit" ? "inherit" : {
|
|
101
|
+
id: entry.model.id,
|
|
102
|
+
params: [...(entry.model.params ?? [])].sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : a.value < b.value ? -1 : a.value > b.value ? 1 : 0)
|
|
103
|
+
.map(({ id, value }) => ({ id, value })),
|
|
104
|
+
},
|
|
105
|
+
]);
|
|
106
|
+
return [`subagents:${createHash("sha256").update(JSON.stringify(content)).digest("hex")}`];
|
|
107
|
+
}
|
|
90
108
|
function buildSessionAgentPoolKey(scopeKey, params) {
|
|
91
109
|
return [
|
|
92
110
|
scopeKey,
|
|
@@ -101,6 +119,7 @@ function buildSessionAgentPoolKey(scopeKey, params) {
|
|
|
101
119
|
: "http1:off",
|
|
102
120
|
buildApiKeyPoolKeyFingerprint(params.apiKey),
|
|
103
121
|
buildBridgePoolKeySuffix("bridge" in params ? params.bridge : getRegisteredCursorPiToolBridge()),
|
|
122
|
+
...buildCustomSubagentPoolKeySuffix(params.agents),
|
|
104
123
|
].join("\0");
|
|
105
124
|
}
|
|
106
125
|
async function disposePoolEntry(entry, options) {
|
|
@@ -252,11 +271,11 @@ function leaseFromEntry(entry, scopeKey, params, created) {
|
|
|
252
271
|
},
|
|
253
272
|
};
|
|
254
273
|
}
|
|
255
|
-
function getCurrentReadyPoolEntry(scopeKey, poolKey) {
|
|
274
|
+
function getCurrentReadyPoolEntry(scopeKey, poolKey, storeRoot) {
|
|
256
275
|
const current = sessionAgentsByScope.get(scopeKey);
|
|
257
276
|
if (current?.status !== "ready")
|
|
258
277
|
return undefined;
|
|
259
|
-
if (current
|
|
278
|
+
if (!samePoolIdentity(current, poolKey, storeRoot))
|
|
260
279
|
return undefined;
|
|
261
280
|
return current;
|
|
262
281
|
}
|
|
@@ -269,7 +288,7 @@ async function tryLeaseReadyEntry(entry, scopeKey, params, poolKey, created) {
|
|
|
269
288
|
await disposePoolEntryForScope(scopeKey);
|
|
270
289
|
return undefined;
|
|
271
290
|
}
|
|
272
|
-
const readyEntry = getCurrentReadyPoolEntry(scopeKey, poolKey);
|
|
291
|
+
const readyEntry = getCurrentReadyPoolEntry(scopeKey, poolKey, params.storeRoot);
|
|
273
292
|
if (!readyEntry)
|
|
274
293
|
return undefined;
|
|
275
294
|
return leaseFromEntry(readyEntry, scopeKey, params, created);
|
|
@@ -303,11 +322,10 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
|
|
|
303
322
|
cwd: params.cwd,
|
|
304
323
|
scopeKey,
|
|
305
324
|
persistent: persistentStore,
|
|
306
|
-
|
|
307
|
-
|
|
325
|
+
storeRoot: params.storeRoot,
|
|
326
|
+
resume: resumeHandle ? { identity: resumeHandle.storeIdentity, agentId: resumeHandle.agentId } : undefined,
|
|
308
327
|
});
|
|
309
328
|
sessionStore = storeSelection.sessionStore;
|
|
310
|
-
const { identities } = storeSelection;
|
|
311
329
|
const resumeAttemptAllowed = storeSelection.resumeAttemptAllowed;
|
|
312
330
|
let resumeNotice = storeSelection.resumeFallback ? LOCAL_RESUME_FALLBACK_NOTICE : undefined;
|
|
313
331
|
const buildAgentOptions = () => ({
|
|
@@ -321,6 +339,7 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
|
|
|
321
339
|
store: sessionStore.store,
|
|
322
340
|
}),
|
|
323
341
|
...(bridgeRun?.mcpServers ? { mcpServers: bridgeRun.mcpServers } : {}),
|
|
342
|
+
...(params.agents && Object.keys(params.agents).length ? { agents: params.agents } : {}),
|
|
324
343
|
});
|
|
325
344
|
let agent;
|
|
326
345
|
let effectiveSendState = sendState;
|
|
@@ -334,9 +353,11 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
|
|
|
334
353
|
catch {
|
|
335
354
|
if (persistentStore)
|
|
336
355
|
resumeNotice = LOCAL_RESUME_FALLBACK_NOTICE;
|
|
337
|
-
if (!cursorSessionStoreIdentitiesEqual(sessionStore.identity, identities.sessionStore)) {
|
|
356
|
+
if (storeSelection.persistent && !cursorSessionStoreIdentitiesEqual(sessionStore.identity, storeSelection.identities.sessionStore)) {
|
|
357
|
+
const { identities } = storeSelection;
|
|
358
|
+
const replacement = await openCursorSessionStore(params.cwd, identities.sessionStore, identities.workspaceRoot, identities.storeRoot);
|
|
338
359
|
await sessionStore.dispose().catch(() => undefined);
|
|
339
|
-
sessionStore =
|
|
360
|
+
sessionStore = replacement;
|
|
340
361
|
}
|
|
341
362
|
}
|
|
342
363
|
}
|
|
@@ -348,6 +369,7 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
|
|
|
348
369
|
return {
|
|
349
370
|
status: "ready",
|
|
350
371
|
poolKey: resolvedPoolKey,
|
|
372
|
+
storeRoot: params.storeRoot,
|
|
351
373
|
instanceId,
|
|
352
374
|
scopeKey,
|
|
353
375
|
agent,
|
|
@@ -376,6 +398,7 @@ export async function acquireSessionCursorAgent(input) {
|
|
|
376
398
|
const params = { ...input, bridge: "bridge" in input ? input.bridge : getRegisteredCursorPiToolBridge() };
|
|
377
399
|
const scopeKey = params.scope?.scopeKey ?? getCursorSessionScopeKey();
|
|
378
400
|
const persistentStore = (params.scope ? params.scope.sessionFile : getCursorSessionFile()) !== undefined;
|
|
401
|
+
params.storeRoot = persistentStore && params.storeRoot !== undefined ? normalizeCursorCustomStoreRoot(params.storeRoot) : undefined;
|
|
379
402
|
while (true) {
|
|
380
403
|
assertScopeAcceptsAcquire(scopeKey);
|
|
381
404
|
if (invalidatedScopeKeys.has(scopeKey)) {
|
|
@@ -383,7 +406,7 @@ export async function acquireSessionCursorAgent(input) {
|
|
|
383
406
|
}
|
|
384
407
|
const poolKey = buildSessionAgentPoolKey(scopeKey, params);
|
|
385
408
|
const state = getSessionCursorAgentPoolState(scopeKey);
|
|
386
|
-
if ((state.status === "ready" || state.status === "busy") && state
|
|
409
|
+
if ((state.status === "ready" || state.status === "busy") && !samePoolIdentity(state, poolKey, params.storeRoot)) {
|
|
387
410
|
await disposePoolEntryForScope(scopeKey);
|
|
388
411
|
continue;
|
|
389
412
|
}
|
|
@@ -398,7 +421,7 @@ export async function acquireSessionCursorAgent(input) {
|
|
|
398
421
|
continue;
|
|
399
422
|
}
|
|
400
423
|
if (state.status === "creating") {
|
|
401
|
-
if (state
|
|
424
|
+
if (!samePoolIdentity(state, poolKey, params.storeRoot)) {
|
|
402
425
|
await disposePoolEntryForScope(scopeKey);
|
|
403
426
|
continue;
|
|
404
427
|
}
|
|
@@ -408,7 +431,7 @@ export async function acquireSessionCursorAgent(input) {
|
|
|
408
431
|
catch (error) {
|
|
409
432
|
if (error instanceof SessionCursorAgentCreationSupersededError) {
|
|
410
433
|
assertScopeAcceptsAcquire(scopeKey);
|
|
411
|
-
|
|
434
|
+
rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, params.storeRoot, error);
|
|
412
435
|
continue;
|
|
413
436
|
}
|
|
414
437
|
throw error;
|
|
@@ -436,6 +459,7 @@ export async function acquireSessionCursorAgent(input) {
|
|
|
436
459
|
placeholder = {
|
|
437
460
|
status: "creating",
|
|
438
461
|
poolKey,
|
|
462
|
+
storeRoot: params.storeRoot,
|
|
439
463
|
instanceId,
|
|
440
464
|
scopeKey,
|
|
441
465
|
sendState,
|
|
@@ -456,7 +480,7 @@ export async function acquireSessionCursorAgent(input) {
|
|
|
456
480
|
}
|
|
457
481
|
if (error instanceof SessionCursorAgentCreationSupersededError) {
|
|
458
482
|
assertScopeAcceptsAcquire(scopeKey);
|
|
459
|
-
|
|
483
|
+
rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, params.storeRoot, error);
|
|
460
484
|
continue;
|
|
461
485
|
}
|
|
462
486
|
throw error;
|
|
@@ -495,8 +519,6 @@ export const __testUtils = {
|
|
|
495
519
|
resetSessionCursorAgent,
|
|
496
520
|
refreshSessionCursorAgentConfig,
|
|
497
521
|
disposeAllSessionCursorAgents,
|
|
498
|
-
buildApiKeyPoolKeyFingerprint,
|
|
499
|
-
buildSessionAgentPoolKey,
|
|
500
522
|
setDeadTransportAgentDisposeTimeoutMs(ms) {
|
|
501
523
|
const previous = deadTransportAgentDisposeTimeoutMs;
|
|
502
524
|
deadTransportAgentDisposeTimeoutMs = ms;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { buildCursorIncrementalPrompt, buildCursorPrompt, shouldBootstrapCursorContext, } from "./context.js";
|
|
2
2
|
// Long-lived SDK session agents can drift tool-call behavior; recreate the agent after this many successful incremental sends.
|
|
3
3
|
export const MAX_COMPLETED_INCREMENTAL_SENDS_BEFORE_REBOOTSTRAP = 20;
|
|
4
|
-
export function planCursorSessionSend(sendState, context) {
|
|
4
|
+
export function planCursorSessionSend(sendState, context, nativeSourceRoles) {
|
|
5
5
|
if (!sendState.bootstrapped) {
|
|
6
6
|
return { mode: "bootstrap", resetAgent: false, reason: "initial" };
|
|
7
7
|
}
|
|
8
8
|
if (sendState.incrementalSendCount >= MAX_COMPLETED_INCREMENTAL_SENDS_BEFORE_REBOOTSTRAP) {
|
|
9
9
|
return { mode: "bootstrap", resetAgent: true, reason: "incremental_threshold" };
|
|
10
10
|
}
|
|
11
|
-
if (shouldBootstrapCursorContext(sendState, context)) {
|
|
11
|
+
if (shouldBootstrapCursorContext(sendState, context, nativeSourceRoles)) {
|
|
12
12
|
return { mode: "bootstrap", resetAgent: true, reason: "context_divergence" };
|
|
13
13
|
}
|
|
14
14
|
return { mode: "incremental", resetAgent: false, reason: "incremental" };
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { existsSync, lstatSync } from "node:fs";
|
|
2
3
|
import { rm } from "node:fs/promises";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { dirname, join, toNamespacedPath } from "node:path";
|
|
4
|
+
import { homedir, tmpdir } from "node:os";
|
|
5
|
+
import { dirname, isAbsolute, join, relative, resolve, sep, toNamespacedPath } from "node:path";
|
|
5
6
|
import { loadCursorSdk } from "./cursor-sdk-runtime.js";
|
|
7
|
+
import { guardCursorCustomStorePath, normalizeCursorCustomStoreRoot, prepareCursorCustomStoreRoot } from "./cursor-custom-store-path.js";
|
|
6
8
|
let sdkOperationsForTests;
|
|
9
|
+
const activeWorkspaceRoots = new Map();
|
|
10
|
+
// ponytail: leases protect only extension-owned stores in this process. Other SDK
|
|
11
|
+
// users/processes must stop before upgrade; a cross-process lock belongs in the SDK.
|
|
7
12
|
export function hashCursorSessionStoreScope(scopeKey) {
|
|
8
13
|
return createHash("sha256")
|
|
9
14
|
.update("pi-cursor-sdk-session-store\0")
|
|
@@ -11,9 +16,8 @@ export function hashCursorSessionStoreScope(scopeKey) {
|
|
|
11
16
|
.digest("hex")
|
|
12
17
|
.slice(0, 32);
|
|
13
18
|
}
|
|
14
|
-
export function buildCursorSessionStateRoot(defaultStateRoot, scopeKey
|
|
15
|
-
|
|
16
|
-
return join(baseRoot, "pi-sessions", hashCursorSessionStoreScope(scopeKey));
|
|
19
|
+
export function buildCursorSessionStateRoot(defaultStateRoot, scopeKey) {
|
|
20
|
+
return join(defaultStateRoot, "pi-sessions", hashCursorSessionStoreScope(scopeKey));
|
|
17
21
|
}
|
|
18
22
|
async function getSdkOperations() {
|
|
19
23
|
if (sdkOperationsForTests)
|
|
@@ -27,76 +31,262 @@ async function getSdkOperations() {
|
|
|
27
31
|
openSqliteStore: (options) => SqliteLocalAgentStore.open(options),
|
|
28
32
|
};
|
|
29
33
|
}
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
function leaseWorkspaceRoot(key, ownership) {
|
|
35
|
+
ownership.users++;
|
|
36
|
+
let released = false;
|
|
32
37
|
return {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
root: ownership.root,
|
|
39
|
+
release: () => {
|
|
40
|
+
if (released)
|
|
41
|
+
return;
|
|
42
|
+
released = true;
|
|
43
|
+
if (--ownership.users === 0)
|
|
44
|
+
activeWorkspaceRoots.delete(key);
|
|
37
45
|
},
|
|
38
46
|
};
|
|
39
47
|
}
|
|
48
|
+
function workspaceLeaseKey(cwd, storeRoot) {
|
|
49
|
+
return JSON.stringify([cwd, storeRoot ?? null]);
|
|
50
|
+
}
|
|
51
|
+
function acquireWorkspaceRoot(cwd, storeRoot) {
|
|
52
|
+
const key = workspaceLeaseKey(cwd, storeRoot);
|
|
53
|
+
let ownership = activeWorkspaceRoots.get(key);
|
|
54
|
+
if (!ownership) {
|
|
55
|
+
ownership = {
|
|
56
|
+
// Publish ownership synchronously, before SDK loading or the public getter.
|
|
57
|
+
root: Promise.resolve().then(async () => {
|
|
58
|
+
if (storeRoot !== undefined) {
|
|
59
|
+
const root = prepareCursorCustomStoreRoot(storeRoot);
|
|
60
|
+
return join(root, createHash("sha256").update(resolve(cwd)).digest("hex").slice(0, 32));
|
|
61
|
+
}
|
|
62
|
+
const operations = await getSdkOperations();
|
|
63
|
+
assertSafeWorkspaceLayout(cwd);
|
|
64
|
+
const root = await operations.getDefaultStateRoot(cwd);
|
|
65
|
+
assertSafeStorePath(root, dirname(root), "local store");
|
|
66
|
+
return root;
|
|
67
|
+
}),
|
|
68
|
+
users: 0,
|
|
69
|
+
};
|
|
70
|
+
activeWorkspaceRoots.set(key, ownership);
|
|
71
|
+
}
|
|
72
|
+
return leaseWorkspaceRoot(key, ownership);
|
|
73
|
+
}
|
|
74
|
+
function retainWorkspaceRoot(cwd, workspaceRoot, storeRoot) {
|
|
75
|
+
const key = workspaceLeaseKey(cwd, storeRoot);
|
|
76
|
+
const ownership = activeWorkspaceRoots.get(key);
|
|
77
|
+
if (!ownership)
|
|
78
|
+
throw new Error("Cursor local workspace ownership is not active");
|
|
79
|
+
const lease = leaseWorkspaceRoot(key, ownership);
|
|
80
|
+
return {
|
|
81
|
+
...lease,
|
|
82
|
+
root: lease.root.then((root) => {
|
|
83
|
+
if (root !== workspaceRoot)
|
|
84
|
+
throw new Error("Cursor local workspace ownership root mismatch");
|
|
85
|
+
return root;
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export async function withCursorSessionStoreIdentities(cwd, scopeKey, selectedRoot, use) {
|
|
90
|
+
const storeRoot = selectedRoot === undefined ? undefined : normalizeCursorCustomStoreRoot(selectedRoot);
|
|
91
|
+
const lease = acquireWorkspaceRoot(cwd, storeRoot);
|
|
92
|
+
try {
|
|
93
|
+
const workspaceRoot = await lease.root;
|
|
94
|
+
return await use({
|
|
95
|
+
workspaceRoot,
|
|
96
|
+
sessionStore: { version: 1, stateRoot: buildCursorSessionStateRoot(workspaceRoot, scopeKey) },
|
|
97
|
+
...(storeRoot === undefined
|
|
98
|
+
? { domain: "default", defaultStore: { version: 1, stateRoot: workspaceRoot } }
|
|
99
|
+
: { domain: "custom", storeRoot }),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
lease.release();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
40
106
|
export function cursorSessionStoreIdentitiesEqual(left, right) {
|
|
41
107
|
return left.version === right.version && left.stateRoot === right.stateRoot;
|
|
42
108
|
}
|
|
43
|
-
|
|
109
|
+
function rejectedStorePath(stateRoot, base) {
|
|
110
|
+
// User-managed ancestors above the SDK prefix (or our temporary removal root)
|
|
111
|
+
// may be links/junctions. Owned components, including the base, may not.
|
|
112
|
+
let path = resolve(base);
|
|
113
|
+
const suffix = relative(path, resolve(stateRoot));
|
|
114
|
+
if (suffix === ".." || suffix.startsWith(`..${sep}`) || isAbsolute(suffix))
|
|
115
|
+
return stateRoot;
|
|
116
|
+
for (const component of ["", ...suffix.split(sep).filter(Boolean)]) {
|
|
117
|
+
path = join(path, component);
|
|
118
|
+
try {
|
|
119
|
+
if (!lstatSync(path).isDirectory())
|
|
120
|
+
return path;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (error.code !== "ENOENT")
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function assertSafeStorePath(stateRoot, base, label) {
|
|
129
|
+
const rejected = rejectedStorePath(stateRoot, base);
|
|
130
|
+
if (rejected)
|
|
131
|
+
throw new Error(`Cursor ${label} path contains a link or non-directory: ${rejected}`);
|
|
132
|
+
}
|
|
133
|
+
function workspaceHashes(cwd) {
|
|
134
|
+
const current = createHash("sha256").update(cwd).digest("hex");
|
|
135
|
+
try {
|
|
136
|
+
return { current, legacy: createHash("md5").update(cwd).digest("hex") };
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error.code === "ERR_OSSL_EVP_UNSUPPORTED" ||
|
|
140
|
+
(error instanceof Error && error.message === "Digest method not supported"))
|
|
141
|
+
return { current, legacy: undefined };
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function assertSafeWorkspaceLayout(cwd) {
|
|
146
|
+
// ponytail: SDK 1.0.36 has no public read-only root resolver; use one when exposed.
|
|
147
|
+
// This pure layout is contract-verified against its factory and public getter;
|
|
148
|
+
// guard it before that getter can rename MD5 history through an owned link.
|
|
149
|
+
const slug = cwd.replace(/[^a-zA-Z0-9]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
150
|
+
const prefix = join(homedir(), ".cursor", "projects", slug, "sdk-agent-store");
|
|
151
|
+
const { current, legacy } = workspaceHashes(cwd);
|
|
152
|
+
for (const hash of [current, legacy]) {
|
|
153
|
+
if (hash)
|
|
154
|
+
assertSafeStorePath(join(prefix, hash), prefix, "local store");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function legacyWorkspaceRoot(cwd, defaultStateRoot) {
|
|
158
|
+
// The public getter owns migration and may return MD5 after a failed rename.
|
|
159
|
+
const { current, legacy } = workspaceHashes(cwd);
|
|
160
|
+
if (!legacy)
|
|
161
|
+
return undefined;
|
|
162
|
+
const prefix = dirname(defaultStateRoot);
|
|
163
|
+
if (defaultStateRoot !== join(prefix, current) && defaultStateRoot !== join(prefix, legacy))
|
|
164
|
+
return undefined;
|
|
165
|
+
return join(prefix, legacy);
|
|
166
|
+
}
|
|
167
|
+
export async function resolveCursorSessionStoreIdentity(options) {
|
|
168
|
+
const { cwd, scopeKey, identities, agentId } = options;
|
|
169
|
+
if (identities.domain === "custom") {
|
|
170
|
+
if (!options.recordedIdentity || !cursorSessionStoreIdentitiesEqual(options.recordedIdentity, identities.sessionStore))
|
|
171
|
+
return undefined;
|
|
172
|
+
// Cleanup admits each candidate before cached-store reuse, which skips the open-time guard.
|
|
173
|
+
assertSafeStorePath(identities.sessionStore.stateRoot, dirname(identities.workspaceRoot), "local store");
|
|
174
|
+
guardCursorCustomStorePath(dirname(identities.workspaceRoot), identities.sessionStore.stateRoot).verify();
|
|
175
|
+
return identities.sessionStore;
|
|
176
|
+
}
|
|
177
|
+
const legacyRoot = legacyWorkspaceRoot(cwd, identities.defaultStore.stateRoot);
|
|
178
|
+
const legacyDefault = legacyRoot ? { version: 1, stateRoot: legacyRoot } : undefined;
|
|
179
|
+
// Version-1 handles predate recorded identities and used the default workspace
|
|
180
|
+
// store. If both roots survive, that old store still owns their data.
|
|
181
|
+
const recorded = options.recordedIdentity ?? legacyDefault ?? identities.defaultStore;
|
|
182
|
+
const base = dirname(identities.defaultStore.stateRoot);
|
|
183
|
+
const current = [identities.defaultStore, identities.sessionStore];
|
|
184
|
+
const exact = current.find((identity) => cursorSessionStoreIdentitiesEqual(identity, recorded));
|
|
185
|
+
if (exact) {
|
|
186
|
+
assertSafeStorePath(exact.stateRoot, base, "local store");
|
|
187
|
+
return exact;
|
|
188
|
+
}
|
|
189
|
+
if (!legacyRoot)
|
|
190
|
+
return undefined;
|
|
191
|
+
const legacySession = { version: 1, stateRoot: buildCursorSessionStateRoot(legacyRoot, scopeKey) };
|
|
192
|
+
const legacy = [legacyDefault, legacySession].find((identity) => identity && cursorSessionStoreIdentitiesEqual(identity, recorded));
|
|
193
|
+
if (!legacy)
|
|
194
|
+
return undefined;
|
|
195
|
+
assertSafeStorePath(legacy.stateRoot, base, "local store");
|
|
196
|
+
if (existsSync(legacyRoot))
|
|
197
|
+
return legacy; // No merge or silent owner switch.
|
|
198
|
+
const migrated = legacy === legacyDefault ? identities.defaultStore : identities.sessionStore;
|
|
199
|
+
assertSafeStorePath(migrated.stateRoot, base, "local store");
|
|
200
|
+
if (!existsSync(migrated.stateRoot))
|
|
201
|
+
return undefined;
|
|
202
|
+
// A missing legacy path alone is not migration proof. The exact cwd/scope
|
|
203
|
+
// destination must independently contain this recorded agent with this cwd.
|
|
204
|
+
const opened = await openCursorSessionStore(cwd, migrated, identities.defaultStore.stateRoot);
|
|
205
|
+
try {
|
|
206
|
+
const agent = await opened.store.agents.get({ agentId });
|
|
207
|
+
return agent?.cwd === cwd ? migrated : undefined;
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
await opened.dispose();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async function openOwnedCursorSessionStore(cwd, identity, options) {
|
|
44
214
|
const openedIdentity = Object.freeze({ ...identity });
|
|
215
|
+
const lease = "workspaceRoot" in options ? retainWorkspaceRoot(cwd, options.workspaceRoot, options.storeRoot) : undefined;
|
|
216
|
+
const removalRoot = "removalRoot" in options ? options.removalRoot : undefined;
|
|
217
|
+
const removeTemporaryStore = async () => {
|
|
218
|
+
if (removalRoot) {
|
|
219
|
+
assertSafeStorePath(openedIdentity.stateRoot, removalRoot, "temporary store removal");
|
|
220
|
+
await rm(removalRoot, { recursive: true, force: true });
|
|
221
|
+
}
|
|
222
|
+
};
|
|
45
223
|
let store;
|
|
46
224
|
try {
|
|
47
|
-
|
|
225
|
+
await lease?.root;
|
|
226
|
+
const base = "workspaceRoot" in options ? dirname(options.workspaceRoot) : options.removalRoot;
|
|
227
|
+
assertSafeStorePath(openedIdentity.stateRoot, base, "local store");
|
|
228
|
+
const guard = "workspaceRoot" in options && options.storeRoot !== undefined
|
|
229
|
+
? guardCursorCustomStorePath(base, openedIdentity.stateRoot) : undefined;
|
|
230
|
+
const operations = await getSdkOperations();
|
|
231
|
+
guard?.verify();
|
|
232
|
+
store = await operations.openSqliteStore({
|
|
48
233
|
workspaceRef: cwd,
|
|
49
234
|
stateRoot: toNamespacedPath(openedIdentity.stateRoot),
|
|
50
235
|
});
|
|
236
|
+
guard?.verify();
|
|
51
237
|
}
|
|
52
238
|
catch (error) {
|
|
53
|
-
|
|
54
|
-
|
|
239
|
+
await store?.dispose().catch(() => undefined);
|
|
240
|
+
lease?.release();
|
|
241
|
+
await removeTemporaryStore().catch(() => undefined);
|
|
55
242
|
throw error;
|
|
56
243
|
}
|
|
244
|
+
const openedStore = store;
|
|
57
245
|
return {
|
|
58
246
|
identity: openedIdentity,
|
|
59
|
-
store,
|
|
247
|
+
store: openedStore,
|
|
60
248
|
dispose: async () => {
|
|
61
249
|
try {
|
|
62
|
-
await
|
|
250
|
+
await openedStore.dispose();
|
|
63
251
|
}
|
|
64
252
|
finally {
|
|
65
|
-
|
|
66
|
-
|
|
253
|
+
lease?.release();
|
|
254
|
+
await removeTemporaryStore();
|
|
67
255
|
}
|
|
68
256
|
},
|
|
69
257
|
};
|
|
70
258
|
}
|
|
71
|
-
export function openCursorSessionStore(cwd, identity) {
|
|
72
|
-
return openOwnedCursorSessionStore(cwd, identity);
|
|
259
|
+
export function openCursorSessionStore(cwd, identity, workspaceRoot, storeRoot) {
|
|
260
|
+
return openOwnedCursorSessionStore(cwd, identity, { workspaceRoot, storeRoot });
|
|
73
261
|
}
|
|
74
262
|
export async function openCursorSessionStoreForScope(options) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
? [identities.defaultStore, identities.sessionStore]
|
|
81
|
-
: [identities.sessionStore];
|
|
82
|
-
const resumeIdentity = requestedResumeIdentity && resumableIdentities
|
|
83
|
-
.find((identity) => cursorSessionStoreIdentitiesEqual(identity, requestedResumeIdentity));
|
|
84
|
-
let resumeAttemptAllowed = options.hasResumeHandle && resumeIdentity !== undefined;
|
|
85
|
-
let resumeFallback = options.persistent && options.hasResumeHandle && !resumeIdentity;
|
|
86
|
-
const selectedIdentity = resumeIdentity ?? identities.sessionStore;
|
|
87
|
-
const removalRoot = options.persistent ? undefined : dirname(dirname(identities.sessionStore.stateRoot));
|
|
88
|
-
let sessionStore;
|
|
89
|
-
try {
|
|
90
|
-
sessionStore = await openOwnedCursorSessionStore(options.cwd, selectedIdentity, removalRoot);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
if (!resumeIdentity || cursorSessionStoreIdentitiesEqual(resumeIdentity, identities.sessionStore))
|
|
94
|
-
throw error;
|
|
95
|
-
resumeAttemptAllowed = false;
|
|
96
|
-
resumeFallback = true;
|
|
97
|
-
sessionStore = await openOwnedCursorSessionStore(options.cwd, identities.sessionStore);
|
|
263
|
+
if (!options.persistent) {
|
|
264
|
+
const removalRoot = join(tmpdir(), `pi-cursor-sdk-${randomUUID()}`);
|
|
265
|
+
const identity = { version: 1, stateRoot: buildCursorSessionStateRoot(removalRoot, options.scopeKey) };
|
|
266
|
+
const sessionStore = await openOwnedCursorSessionStore(options.cwd, identity, { removalRoot });
|
|
267
|
+
return { persistent: false, sessionStore, identities: { sessionStore: identity }, resumeAttemptAllowed: false, resumeFallback: false };
|
|
98
268
|
}
|
|
99
|
-
return
|
|
269
|
+
return withCursorSessionStoreIdentities(options.cwd, options.scopeKey, options.storeRoot, async (identities) => {
|
|
270
|
+
const resumeIdentity = options.resume ? await resolveCursorSessionStoreIdentity({
|
|
271
|
+
cwd: options.cwd, scopeKey: options.scopeKey, identities,
|
|
272
|
+
recordedIdentity: options.resume.identity, agentId: options.resume.agentId,
|
|
273
|
+
}).catch(() => undefined) : undefined; // Unreadable resume storage falls back; fresh-store failures still propagate.
|
|
274
|
+
let resumeAttemptAllowed = resumeIdentity !== undefined;
|
|
275
|
+
let resumeFallback = options.resume !== undefined && !resumeIdentity;
|
|
276
|
+
const selectedIdentity = resumeIdentity ?? identities.sessionStore;
|
|
277
|
+
let sessionStore;
|
|
278
|
+
try {
|
|
279
|
+
sessionStore = await openCursorSessionStore(options.cwd, selectedIdentity, identities.workspaceRoot, identities.storeRoot);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
if (!resumeIdentity || cursorSessionStoreIdentitiesEqual(resumeIdentity, identities.sessionStore))
|
|
283
|
+
throw error;
|
|
284
|
+
resumeAttemptAllowed = false;
|
|
285
|
+
resumeFallback = true;
|
|
286
|
+
sessionStore = await openCursorSessionStore(options.cwd, identities.sessionStore, identities.workspaceRoot, identities.storeRoot);
|
|
287
|
+
}
|
|
288
|
+
return { persistent: true, sessionStore, identities, resumeAttemptAllowed, resumeFallback };
|
|
289
|
+
});
|
|
100
290
|
}
|
|
101
291
|
export const __testUtils = {
|
|
102
292
|
setSdkOperations(operations) {
|